Если в списке товаров показываются торговые предложения, то при использовании умного фильтра отфильтровываются только товары, имеющие тот или иной параметр в торговых предложениях. При этом, у товара показываются все торговые предложения.
В данном посте рассмотрим, что нужно сделать, чтобы в списке показывались только те торговые предложения, которые соответствуют выбранным в умном фильтре параметрам.
Для реализации фильтрации торговых предложений в списке товаров, необходимо в самом начале файла result_modifier.php шаблона компонента catalog.section добавить код, проверяющий, есть ли фильтрация по торговым предложениям и, если есть, - отфильтровать остальные:
При использовании системного компонента умного фильтра, в глобмальном массиве фильтра есть ключ для фильтрации по торговым предложениям - OFFERS - вот к нему мы и подвяжемся.
if(isset($GLOBALS[$arParams['FILTER_NAME']]) && !empty($GLOBALS[$arParams['FILTER_NAME']]['OFFERS'])){ foreach ($GLOBALS[$arParams['FILTER_NAME']]['OFFERS'] as $filterKey=>$arFilterValues) { $filterPropertyId = array_pop(explode('_', $filterKey)); $filter_condition = substr($filterKey, 0, 1); foreach ($arResult['ITEMS'] as $key=>$arItem){ $arOffers = []; // перебираем торговые предложения товара foreach ($arItem['OFFERS'] as $arOffer){ $returnOffer = false; foreach ($arOffer['PROPERTIES'] as $arProperty){ if($arProperty['ID']==$filterPropertyId){ if($filter_condition=='='){ foreach ($arFilterValues as $filterValue){ if($filterValue==$arProperty['VALUE']){ $returnOffer = true; } } } else { $returnOffer = true; } } } if($returnOffer){ $arOffers[] = $arOffer; } } $arResult['ITEMS'][$key]['OFFERS'] = $arOffers; } } }
Благодаря такой нехитрой обработке мы избавимся от торговых предложений, которые не удовлетворяют выбранным параметрам фильтрации. При этом свойства типа "Число" в умном фильтре работают по схеме от .. до .. - поэтому их не берем во внимание.
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.