Суть проблемы, на сайте около 10к товаров, и около 1к разделов. Выгружаются все товары из 1С в один или несколько разделов, крайне неудобно каждый товар добавлять по всем нужным разделам, ну скажем у товара может быть 1 основной раздел и десятки сопутствующих по каталогу.
Как сделать автоматическую привязку товаров к разделам? Например по свойствам.
У разделов задаём определенный фильтр в настройках (например ТАРЕЛКИ && БЕЛЫЕ) и в разделе появляются все тарелки белые у кого есть такие свойства.
Где в компоненте каталога нужно переопределить вывод товаров, т.е. где подсунуть в SMART_FILTER новую фильтрацию с оператором OR,. чтоб наши критерии фильтра заданные у раздела дополняли вывод товаров
это уже не совсесм разделы, а посадочные чтраницы или теги.
- прописывайте в настройках такого раздела фильтр (в виде списка параметров или json с условиями)
- а при показе товаров такого раздела - выводите товары по этому фильтру
scottparker, можно и так. Дело не в этом, дело в том, что компонент передаёт ID раздела в фильтр, в самом Классе
protected function initElementList()
{
parent::initElementList();
// compatibility for old components
if ($this->isEnableCompatible() && empty($this->arResult['NAV_RESULT']))
{
$this->initNavString(\CIBlockElement::GetList(
array(),
array_merge($this->globalFilter, $this->filterFields + array('IBLOCK_ID' => $this->arParams['IBLOCK_ID'])),
вот $this->filterFields содержит массив из $arParams компонента,
Помогает вот такая конструкция, т.е. если задано свойство доп фильтра для раздела, то убираем ID раздела, но тут другая беда возникает, пользовательский фильтр SmartFilter перестаёт видеть новые товары по выборке, и пропадает навигация хлебных крошек, ну это и понятно, мы же убрали текущий раздел.
if($arSection["FILTER"]){
$arrFilter = array(
$arrFilter, //добавляем глобальный фильтр в себя же, для того что бы работал пользовательский фильтр с нашими условиями
"LOGIC" => "AND",
array(
"LOGIC" => "OR",
array("%NAME" => $arSection["FILTER"]),
array("SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"]),
),
);
$arResult["VARIABLES"]["SECTION_ID"] = 0; // Выключаем передачу ID раздела
$arResult["VARIABLES"]["SECTION_CODE"] = '';