Показываем в списке только отфильтрованные предложения

Показываем в списке только отфильтрованные предложения

70
07.03.2019

Если в списке товаров показываются торговые предложения, то при использовании умного фильтра отфильтровываются только товары, имеющие тот или иной параметр в торговых предложениях. При этом, у товара показываются все торговые предложения.

В данном посте рассмотрим, что нужно сделать, чтобы в списке показывались только те торговые предложения, которые соответствуют выбранным в умном фильтре параметрам.

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

Благодаря такой нехитрой обработке мы избавимся от торговых предложений, которые не удовлетворяют выбранным параметрам фильтрации. При этом свойства типа "Число" в умном фильтре работают по схеме от .. до .. - поэтому их не берем во внимание.



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку