Для реализации фильтрации торговых предложений в списке товаров, необходимо в самом начале файла 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;
}
}
}
Благодаря такой нехитрой обработке мы избавимся от торговых предложений, которые не удовлетворяют выбранным параметрам фильтрации. При этом свойства типа "Число" в умном фильтре работают по схеме от .. до .. - поэтому их не берем во внимание.
