Допустим есть нас каталог, где есть элементы со свойствами. Как вывести каталог, это все понятно. Но если нам потребуется вывести на отдельной странице только элементы какого-либо раздела, да еще и отфильтровать их по свойству.
Главное думать в првильном направлении. Нам нужно перед выводом инфоблока создать фильтр, а самому инфоблоку казать, чтобы он слушался нашего фильтра.
В коде это выглядит так:
«ТУТ-ЗНАЧЕНИЕ-СВОЙСТВА-НАПРИМЕР-ЦВЕТ-БЕЛЫЙ-ИЛИ-Т.-П.»); // это наш фильтр для выборки по свойству
$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 у нас хранится последний связанный элемент. Если его нет (переменная пустая) — то и фильтр с каталогом не вызываются в карточке