<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум ReadyScript &mdash; Дополнительный фильтр по наличию фотографий товара]]></title>
		<link>https://forum.readyscript.ru/topic/923/dopolnitelnyi-filtr-po-nalichiyu-fotografii-tovara/</link>
		<atom:link href="https://forum.readyscript.ru/feed/rss/topic/923/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Дополнительный фильтр по наличию фотографий товара».]]></description>
		<lastBuildDate>Tue, 11 Oct 2016 04:46:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4967/#p4967</link>
			<description><![CDATA[<p>Финальный вариант, если кого вдруг заинтересует:</p><div class="codebox"><pre><code>$adv_config = \RS\Config\Loader::byModule(&quot;custom&quot;); /*Проверяем настройку показа товаров без фотографий*/
        if ($adv_config[&#039;hide_nophoto_product&#039;] == 1) {

            $q = $this-&gt;queryObj();

            if ($q-&gt;select === &#039;*&#039;) {
                $q-&gt;select = null;
                $q-&gt;select(&#039;A.*, X.*&#039;);
            }

            $q-&gt;join(new \Photo\Model\Orm\Image, &#039;I.linkid = A.id&#039;, &#039;I&#039;);
            $q-&gt;groupby(&#039;A.id&#039;);

        }</code></pre></div><p>Выяснилось, что при использовании подзапроса в секции WHERE - ломается напрочь поиск и крайне медленно выполняется запрос в случае использования фильтров на странице каталога. Сделал в итоге через JOIN и добавил условие, так как при поиске должны выбираться только поля из таблицы `A`, а таблица `X` - вообще не джойнится при поиске. Косяков не обнаружено и скорость отличная.</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Tue, 11 Oct 2016 04:46:08 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4967/#p4967</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4831/#p4831</link>
			<description><![CDATA[<p>ВЫ можете через запятую указать те таблицы которые нужны в SELECT.<br /></p><div class="codebox"><pre><code>A.*, B.* и т.д.</code></pre></div><p>Т.е. исключите картинки.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Fri, 30 Sep 2016 16:18:01 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4831/#p4831</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4829/#p4829</link>
			<description><![CDATA[<p>Все, теперь я доволен.</p><div class="codebox"><pre><code>$adv_config = \RS\Config\Loader::byModule(&quot;custom&quot;);
        if ($adv_config[&#039;hide_nophoto_product&#039;] == 1) {
            $qImage = new \RS\Orm\Request();
            $qImage
                -&gt;select(&#039;linkid&#039;)
                -&gt;from(new \Photo\Model\Orm\Image(), &#039;Img&#039;);
            $this-&gt;queryObj()
                -&gt;where(&quot;A.id IN (&quot;.$qImage-&gt;toSql().&quot;)&quot;);

        }</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 15:30:31 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4829/#p4829</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4828/#p4828</link>
			<description><![CDATA[<p>только вот мне не нравится, что замес получился с sql синтаксисом. Хочется как-то в отдельный запрос вывести то, что в скобках, но не пойму, как.</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 15:17:35 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4828/#p4828</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4827/#p4827</link>
			<description><![CDATA[<p>Не, так не пойдет. Тогда приджойненные цены не выведутся. Но я нашел способ. Вместо join использовал where с подзапросом и условием, что id товара находится в результатах этого запроса.</p><div class="codebox"><pre><code>$this-&gt;queryObj()
                -&gt;where(&quot;A.id IN (SELECT `linkid` FROM `readyscriptyoung`.`rs_images`)&quot;);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 15:15:17 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4827/#p4827</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4824/#p4824</link>
			<description><![CDATA[<p>Как и во всех SQL запросах, нужно указать то что собираетесь выбирать конкретно.<br /></p><div class="codebox"><pre><code>SELECT A.*</code></pre></div><div class="codebox"><pre><code>-&gt;select(&#039;A.*&#039;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Fri, 30 Sep 2016 15:07:32 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4824/#p4824</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4821/#p4821</link>
			<description><![CDATA[<p>Александр, спасибо. Заработало. Вот текст запроса. Новая проблема - после JOIN в поле id товара передается теперь id изображения. Соответственно, в каталоге начинается вакханалия, ибо везде в переменной $product.id теперь id картинки. Как-то можно исключить из секции SELECT поле Img.id?</p><div class="codebox"><pre><code>SELECT * FROM `readyscriptyoung`.`rs_product` as A 
INNER JOIN `readyscriptyoung`.`rs_product_x_dir` as X ON A.id = X.product_id 
INNER JOIN `readyscriptyoung`.`rs_images` as Img ON A.id = Img.linkid 
WHERE (`A`.`site_id` = &#039;1&#039;) AND `X`.`dir_id` IN (&#039;675&#039;,&#039;676&#039;,&#039;677&#039;,&#039;678&#039;,&#039;679&#039;,&#039;680&#039;,&#039;681&#039;,&#039;682&#039;,&#039;683&#039;,&#039;684&#039;,&#039;685&#039;,&#039;686&#039;,&#039;687&#039;,&#039;688&#039;,&#039;689&#039;,&#039;690&#039;,&#039;691&#039;,&#039;692&#039;,&#039;834&#039;,&#039;835&#039;,&#039;837&#039;,&#039;845&#039;,&#039;846&#039;,&#039;847&#039;,&#039;848&#039;,&#039;849&#039;,&#039;850&#039;,&#039;851&#039;,&#039;852&#039;,&#039;853&#039;,&#039;854&#039;,&#039;855&#039;,&#039;907&#039;,&#039;674&#039;,&#039;694&#039;,&#039;695&#039;,&#039;696&#039;,&#039;698&#039;,&#039;699&#039;,&#039;700&#039;,&#039;701&#039;,&#039;702&#039;,&#039;703&#039;,&#039;838&#039;,&#039;856&#039;,&#039;857&#039;,&#039;858&#039;,&#039;875&#039;,&#039;876&#039;,&#039;900&#039;,&#039;901&#039;,&#039;902&#039;,&#039;904&#039;,&#039;905&#039;,&#039;906&#039;,&#039;693&#039;,&#039;673&#039;,&#039;672&#039;) AND `A`.`public` = &#039;1&#039; AND `A`.`num` &gt; &#039;0&#039; 
ORDER BY dateof DESC</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 13:13:33 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4821/#p4821</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4820/#p4820</link>
			<description><![CDATA[<p>Ух ты, похоже, что да, оно. Да и из своего модуля все-таки кошернее. Отпишусь по-результату. Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 10:16:48 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4820/#p4820</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4819/#p4819</link>
			<description><![CDATA[<p>filterSection по идее срабатывает тогда когда вы пытаетесь фильтровать что-то. Вам нужен вывод сразу во всём каталоге только тех что с фото? Я правильно понимаю?</p><p>Если да, то тогда лучше всего подвеситься из своего модуля на хук страницы со списком товаров. И уже у объекта API добавить нужный фильтр.<br /><strong>controller.beforeexec.catalog-front-listproducts</strong></p><p>Там первым аргументом будет.<br /></p><div class="codebox"><pre><code>/**
* @param \Catalog\Controller\Front\ListProducts $controller - объект контроллера
* @param string $action - наименование метода, который отработал (использовать для нужного)
*/
public static function controllerBeforeexecCatalogFrontListproducts($controller, $action)
{
     $q = $controller-&gt;api-&gt;queryObj(); //Потому что у фронт контроллера публичное свойство $api, в котором объект API товаров
     //И нужные мне действия с \RS\Orm\Request в $q, т.е. обычным запросом
}</code></pre></div><p>Попробуйте, если это оно.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Fri, 30 Sep 2016 10:04:31 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4819/#p4819</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4817/#p4817</link>
			<description><![CDATA[<p>Ничего не выводит, похоже, что я совсем не туда вставляю код. Помогите найти, где происходит первичное формирование запроса для вывода каталога.</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Fri, 30 Sep 2016 09:37:53 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4817/#p4817</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4808/#p4808</link>
			<description><![CDATA[<p>Ах да там же у Вас innerjoin. В проверьте у Вас в эту ветку заходит.<br />Можно вывести итоговый SQL так:<br /></p><div class="codebox"><pre><code>var_dump($q-&gt;toSql());</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Thu, 29 Sep 2016 16:38:39 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4808/#p4808</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4806/#p4806</link>
			<description><![CDATA[<p>А разве сам по себе join не подразумевает, что в выборку попадает только пересечение? Таким образом моя логика говорит мне, что останутся в выборке только товары, у которых есть соответствие в таблице с изображениями. Разве не так?</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Thu, 29 Sep 2016 14:22:50 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4806/#p4806</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4799/#p4799</link>
			<description><![CDATA[<p>Ну прибавили Вы таблицу с фото. А где WHERE с условием?</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Wed, 28 Sep 2016 16:22:34 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4799/#p4799</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4798/#p4798</link>
			<description><![CDATA[<p>Не работает ))</p>]]></description>
			<author><![CDATA[null@example.com (Максим)]]></author>
			<pubDate>Wed, 28 Sep 2016 15:14:16 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4798/#p4798</guid>
		</item>
		<item>
			<title><![CDATA[Re: Дополнительный фильтр по наличию фотографий товара]]></title>
			<link>https://forum.readyscript.ru/post/4797/#p4797</link>
			<description><![CDATA[<p>И в чём вопрос?)</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Wed, 28 Sep 2016 15:13:07 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/4797/#p4797</guid>
		</item>
	</channel>
</rss>
