Всем добрый день. Столкнулся с такой проблемой, есть каталог у которого есть торговые предложения, задача стояла такая, сделать галочку "выводить только в наличие", то есть фильтровать каталог по товарам у которых есть хотя бы одно ТП с количеством > 0. Если ставить стандартную галочку компонента catalog.section, что не нужно выводить товары, которых нет на складе, то нам просто выдастся товар с пустым массивом OFFERS, ок, можно было бы сделать проверку и не выводить этот пустой товар, но, тогда порушится вся постраничная навигация. Тогда я сделал фильтр перед подключением компонента с подзапросом, который проверяет как раз наличие ТП:
всё круто, выводятся товары только у которых есть на складе ТП. НО, при использовании умного фильтра не происходит фильтрация, я даже знаю, почему, да потому что умный фильтр тоже использует конструкцию ["=ID"] в фильтре и получается, что мой фильтр перезаписывает выборку умного фильтра. Вопрос, как их подружить? Может есть другой вариант фильтрации? У меня в голове вертится только один долгий и глупый вариант, написать обработчик на события, который бы сохранял в какое-нибудь поле товара общее количество ТП, которое бы суммировал.
Код |
---|
if($_REQUEST["in_stock"] == "Y"){ $arrFilter2 = array( "=ID" => CIBlockElement::SubQuery("PROPERTY_CML2_LINK", array( "IBLOCK_ID" => DIALETA_OFFERS_IBLOCK_ID, ">CATALOG_QUANTITY" => 0 ) ) ); $HIDE_NOT_AVAILABLE = "Y"; } |
всё круто, выводятся товары только у которых есть на складе ТП. НО, при использовании умного фильтра не происходит фильтрация, я даже знаю, почему, да потому что умный фильтр тоже использует конструкцию ["=ID"] в фильтре и получается, что мой фильтр перезаписывает выборку умного фильтра. Вопрос, как их подружить? Может есть другой вариант фильтрации? У меня в голове вертится только один долгий и глупый вариант, написать обработчик на события, который бы сохранял в какое-нибудь поле товара общее количество ТП, которое бы суммировал.