bitrix catalog section list фильтр

Допустим есть нас каталог, где есть элементы со свойствами. Как вывести каталог, это все понятно. Но если нам потребуется вывести на отдельной странице только элементы какого-либо раздела, да еще и отфильтровать их по свойству.

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

В коде это выглядит так:

«ТУТ-ЗНАЧЕНИЕ-СВОЙСТВА-НАПРИМЕР-ЦВЕТ-БЕЛЫЙ-ИЛИ-Т.-П.»); // это наш фильтр для выборки по свойству
$APPLICATION->IncludeComponent(
«bitrix:catalog.section»,
«template1»,
Array(
«AJAX_MODE» => «N»,
«IBLOCK_TYPE» => «xmlcatalog»,
«IBLOCK_ID» => «14»,
«SECTION_ID» => «104»,
«SECTION_CODE» => «»,
«SECTION_USER_FIELDS» => array(),
«ELEMENT_SORT_FIELD» => «sort»,
«ELEMENT_SORT_ORDER» => «asc»,
«FILTER_NAME» => «arrFilter», // вот тут мы оставляем так как есть «arrFilter», это указывает на то, что наш инфоблок будет обращать внимание на параметры для него заданные, а его самого мы написали впереди. «INCLUDE_SUBSECTIONS» => «Y»,
«SHOW_ALL_WO_SECTION» => «N»,
«SECTION_URL» => «»,
. и т.д. и т.п.

Не проверено, но если свойство предоставлено не в виде одной строки, а в виде списка, то нужно фильтр писать как VALUE, т.е. вот так:

$arrFilter = array(«PROPERTY_ТУТ-НАШЕ-СВОЙСТВО_ VALUE» => «ТУТ-ЗНАЧЕНИЕ-СВОЙСТВА-НАПРИМЕР-ЦВЕТ-БЕЛЫЙ-ИЛИ-Т.-П.»); // это наш фильтр для выборки по свойству

Либо еще вот так:

’22’);
$APPLICATION->IncludeComponent(«bitrix:news.list», «.default», array(
«IBLOCK_TYPE» => «news»,
«IBLOCK_ID» => «7»,
«NEWS_COUNT» => «20»,
«SORT_BY1» => «ACTIVE_FROM»,
«SORT_ORDER1» => «DESC»,
«SORT_BY2» => «SORT»,
«SORT_ORDER2» => «ASC»,
«FILTER_NAME» => «myAddFilter»,
«FIELD_CODE» => array(

Фильтруем вывод news.list по ID элемента, на странице детального просмотра элемента, к которому они привязаны по свойству «Привяpка к элементам» с идентификатором BUY_WITH

IncludeComponent(«bitrix:catalog.section», «analog», array(
«IBLOCK_TYPE» => «catalog»,
«IBLOCK_ID» => «7»,
«SECTION_ID» => «»,
«SECTION_CODE» => «».

Битрикс все лучше и лучше совершенствует нашу логику или пытается заставить нас думать как он 🙂

Добрый вечер! Имеется компонент catalog.section.list. Вызываю его так:

Задача такова: сделать вывод не всех разделов, как это сделано сейчас, а сделать вывод определённых разделов по ID, что-то вроде фильтра. Как это можно сделать?

Достаточно часто, при разработке магазинов на битрикс, требуется выводить связанные элементы внутри карточки товара. Данный блок, может называться как угодно и преследовать различные маркетинговые цели. Например, для блоков: Рекомендуем посмотреть, Аналоги, похожие товары итд.

В битрикс уже есть компонент для вывода свзанных элементов — catalog.link.list, но мы используем catalog.section. Благодаря этому, во первых, получим большую гибкость и управляемость. Во вторых, удобно хранить все в одном шаблоне: и для результатов поиска и для раздела каталога и в принципе, для вывода catalog.section в любом месте сайта с единным шаблоном оформления.

Свойство типа привязка к элементам и вывод связанных товаров

Для начала, в инфоблоке каталога создаем свойство «SIMILAR_PRODUCT», в котором будут храниться ID связанных элементов. Используем, тип свойства «Привязка к элементам«, делаем его множественным и в настройках свойства указываем этот же инфоблок (каталог), в качестве привязки:

Далее, в шаблоне детальной карточки товара в комплексном шаблоне каталога, содаем файл component_epilog.php Внутри которого размещаем следующий код:

Мы знаем ID текущего элемента ($arResult[‘ID’]), знаем его инфоблок ($arResult[‘IBLOCK_ID’]) и создали пустой массив $arrayLinks

С помощью CIBlockElement::GetList мы получили свойство, текущего элемента, SIMILAR_PRODUCT и загнали айдишники связанных элементов в массив $arrayLinks

Дело осталось за малым: после данного кода выводим bitrix:catalog.section. Настраиваем его как нам нужно: инфоблок, все необходимые данные, шаблон итд. Если сейчас посмотрим в карточку товара, увидем вывод вообще всех товаров из каталога. Нам осталось, только отфильтровать нужные товары (связанные с текущим).

И Мы знаем ID-шники всех связанных товаров, в массиве $arrayLinks. Просто используем его в глобальном фильтре. Над вызовом bitrix:catalog.section навешиваем фильтр

И указываем этот фильтр в выводе bitrix:catalog.section

В общем-то и все, теперь в карточке товара будут выводиться только связанные с ним элементы (товары).

Последний штрих

Так как bitrix:catalog.section в любом случае отработает в карточке, даже если у текущего товара нет связанных элементов, просто ни чего не отфильтрует. Есть резон снять эту нагрузку, обвернув вызов глобального фильтра и catalog.section в условие:

В переменной $LincedIsEmpty у нас хранится последний связанный элемент. Если его нет (переменная пустая) — то и фильтр с каталогом не вызываются в карточке

Оцените статью