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

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

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

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

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

Количество показов: 4257
07.03.2019

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.