Либо ID/CODE раздела, либо фильтр в catalog.section

Рейтинг: 14.5144  
Внедрено
Предложил Абашев Дмитрий 14.02.2012 14:11:57

Либо ID/CODE раздела, либо фильтр в catalog.section

Проблема заключается в том, что компонент "bitrix:catalog.section" не реагирует на фильтр, если в параметрах не передан ID/CODE раздела инфоблока. При этом не спасает даже параметр "SHOW_ALL_WO_SECTION", установленный в значение "Y", хотя пару лет назад это решение работало.

Собственно, эта логика прослеживается в исходном коде компонента "bitrix:catalog.section", но такое поведение компонента является неоправданным и усложняет разработку проектов. Объективной необходимости проводить проверку наличия ID/CODE раздела до обработки фильтра нет: эти вещи не являются взаимоисключающими. При этом фильтр по всем элементам (без указания разделов) заказчики требуют довольно часто, и каждый раз кастомизировать компонент - не очень хороший выход.

Предлагаю либо довести компонент "bitrix:catalog.section" до ума, либо создать аналогичный компонент, не требующий жесткого указания раздела. Например, его можно назвать "Элементы инфоблока".

P.S. В поддержке проблемой это признать отказались. В принципе, их можно понять, но разработчикам от этого не легче.
Рейтинг: 0  
Ответил Жуков Евгений 01.09.2014 14:43:43
Компонент применяет фильтр, даже если раздел не найден (считается, что идет работа с корневым разделом).

Рейтинг: -0.2641  
Малеткин Максим 22.01.2016 07:11:51
Возможно проблема в фасетном индексе. Без него фильтрация работает без родительского раздела. При использовании фасетного индекса в компонент bitrix:catalog.smart.filter необходимо передавать id родительского раздела или 0.
Рейтинг: 0  
Денис 09.12.2016 17:09:09
Столкнулся с такой же проблемой. Методом тыка определил,что...
Вставьте следующее:
   if ($arFilter['SECTION_ID'] == 0) {
      unset($arFilter['SECTION_ID']);
   }
 
Перед кодом компонента catalog.section
//EXECUTE
   $rsElements = CIBlockElement::GetList($arSort, array_merge($arrFilter, $arFilter), false, $arNavParams, $arSelect);
 
И тогда нормально будет работать фильтр без раздела.
Странное поведение на самом деле.

Заранее скопируйте компонент в свой НеймСпейс