Документация для разработчиков
Темная тема

Умный фильтр

Компонент подготавливает фильтр для выборки из инфоблока и выводит форму фильтра для фильтрации элементов.


Описание catalog.smart.filter

Компонент должен подключаться перед компонентом вывода элементов каталога, иначе список элементов фильтроваться не будет. Компонент стандартный, входит в дистрибутив модуля и содержит четыре шаблона: .default, bootstrap_v4, visual_horizontal и visual_vertical (последние два шаблона не поддерживаются, остались для сохранения совместимости).

В визуальном редакторе компонент расположен по пути Контент > Каталог > Умный фильтр.

Компонент относится к модулю Информационные блоки.

Внимание! В префильтре нельзя использовать вызов CIBlockElement::SubQuery.



Параметры

ПолеПараметрОписание
Источник данных
Тип инфоблокаIBLOCK_TYPEУказывается один из созданных в системе типов информационных блоков.
ИнфоблокIBLOCK_IDДля выбранного типа инфоблоков указывается идентификатор информационного блока, элементы которого будут отфильтрованы.
ID раздела инфоблокаSECTION_IDУказывается идентификатор раздела, фильтрация элементов которого должна выполняться. Можно не указывать, если задан Код раздела.

Примечание: при включенном режиме ЧПУ параметр настраивается в секции Управление адресами страниц.
Код разделаSECTION_CODEУказывается код раздела, фильтрация элементов которого должна выполняться. Можно не указывать, если задан ID раздела инфоблока.

Примечание: при включенном режиме ЧПУ параметр настраивается в секции Управление адресами страниц.
Имя входящего массива для дополнительной фильтрации элементовPREFILTER_NAMEЗадается имя переменной, в которую передается массив параметров из дополнительного фильтра. Если имя массива не указано, то будет использоваться значение по умолчанию.
Имя выходящего массива для фильтрацииFILTER_NAMEЗадается имя переменной, в которую передается массив параметров из фильтра. Если имя массива не указано, то будет использоваться значение по умолчанию.
Не отображать недоступные товарыHIDE_NOT_AVAILABLE[Y|N] При отмеченной опции будут скрыты товары, для которых общее количество на складах меньше либо равно нулю, включен количественный учет и не разрешена покупка при отсутствии товара.
Внешний вид
Цветовая темаTEMPLATE_THEMEЗадается цветовая схема для отображения фильтра. По умолчанию используется синяя схема (blue).
Вид отображения умного фильтраFILTER_VIEW_MODEЗадается вид отображения умного фильтра: вертикальный (VERTICAL) или горизонтальный (HORIZONTAL).
Позиция для отображения всплывающего блока с информацией о фильтрацииPOPUP_POSITIONЗадается позиция отображения всплывающего блока: слева (left) или справа (right).
Показывать количествоDISPLAY_ELEMENT_COUNT[Y|N] При отмеченной опции в всплывающем блоке будет показано количество отобранных элементов в соответствии с условиями фильтрации.
Управление адресами страниц
Включить поддержку ЧПУSEF_MODE[Y|N] При отмеченной опции включается поддержка ЧПУ и становятся доступными поля настройки ЧПУ.
Правило для обработкиSEF_RULEУказывается правило обработки вызова умного фильтра. Для создания правила следует использовать шаблоны, доступные по кнопке [...].

Например, компонент умного фильтра расположен на странице /examples/books/section.php, тогда правило может быть задано следующим образом:
/examples/books/#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/
где /filter/, /apply/ - выражения-ограничители, обязательно присутствующие в правиле (могут быть заменены на любые другие слова).
ID раздела инфоблокаSECTION_IDУказывается ID раздела инфоблока. Можно не задавать, если указан Код раздела или Путь из символьных кодов раздела.

Примечание: при отключенном режиме ЧПУ параметр настраивается в секции Источник данных.
Код разделаSECTION_CODEУказывается символьный код раздела инфоблока. Можно не задавать, если указан ID раздела инфоблока или Путь из символьных кодов раздела.

Примечание: при отключенном режиме ЧПУ параметр настраивается в секции Источник данных.
Путь из символьных кодов разделаSECTION_CODE_PATHЗадается путь из символьных кодов раздела инфоблока. Можно не задавать, если указан Код раздела или ID раздела инфоблока.
Блок ЧПУ умного фильтраSMART_FILTER_PATHЗадается блок с параметрами фильтрации. По умолчанию подставляется значение ={$_REQUEST["SMART_FILTER_PATH"]}.
Настройки кеширования
Тип кешированияCACHE_TYPEТип кеширования:
  • A - Авто + Управляемое: автоматически обновляет кеш компонентов в течение заданного времени или при изменении данных;
  • Y - Кешировать: для кеширования необходимо определить время кеширования;
  • N - Не кешировать: кеширования нет в любом случае.
Время кеширования (сек.)CACHE_TIMEВремя кеширования, указанное в секундах.
Учитывать права доступаCACHE_GROUPS[Y|N] При отмеченной опции будут учитываться права доступа при кешировании.
Дополнительные настройки
Сохранять установки фильтра в сессии пользователяSAVE_IN_SESSION[Y|N] При отмеченной опции установки фильтра будут сохраняться в сессии пользователя.
Имя массива с переменными для построения ссылок в постраничной навигацииPAGER_PARAMS_NAMEЗадается имя переменной, в которой передается массив с переменными для построения ссылок компонентом постраничной навигации.
Цены
Тип ценыPRICE_CODEУказывается тип цены для фильтрации элементов.
Показывать цены в одной валютеCONVERT_CURRENCY[Y|N] При отмеченной опции цены в фильтре будут отображаться в одной валюте, даже если для товаров они будут заданы в разных валютах. Будет доступно для заполнения дополнительное поле.
Валюта, в которую будут сконвертированы ценыCURRENCY_IDВыбор валюты, в которой будут отображаться цены.


Примечание: конвертация цен в умном фильтре работает только при созданном фасетном индексе.
Поддержка Яндекс Островов (экспорт фильтра в XML)
Включить поддержку Яндекс ОстрововXML_EXPORT[Y|N] При отмеченной опции будет включена поддержка Яндекс Островов.
ЗаголовокSECTION_TITLEУказывается поле, которое будет использоваться в качестве заголовка раздела.
ОписаниеSECTION_DESCRIPTIONЗадается поле, которое будет использоваться в качестве описания раздела.

Примечание: в компоненте имеется специальный параметр SHOW_ALL_WO_SECTION, принимающий значения Y|N. Если задано значение Y, то будут отображены все элементы инфоблока, если не указан раздел.



Пример вызова

<?$APPLICATION->IncludeComponent(
	"bitrix:catalog.smart.filter", 
	".default", 
	array(
		"COMPONENT_TEMPLATE" => ".default",
		"IBLOCK_TYPE" => "books",
		"IBLOCK_ID" => "6",
		"SECTION_ID" => "10",
		"SECTION_CODE" => "",
		"FILTER_NAME" => "arrFilter",
		"HIDE_NOT_AVAILABLE" => "N",
		"TEMPLATE_THEME" => "blue",
		"FILTER_VIEW_MODE" => "horizontal",
		"DISPLAY_ELEMENT_COUNT" => "Y",
		"SEF_MODE" => "Y",
		"CACHE_TYPE" => "A",
		"CACHE_TIME" => "36000000",
		"CACHE_GROUPS" => "Y",
		"SAVE_IN_SESSION" => "N",
		"INSTANT_RELOAD" => "Y",
		"PAGER_PARAMS_NAME" => "arrPager",
		"PRICE_CODE" => array(
			0 => "BASE",
		),
		"CONVERT_CURRENCY" => "Y",
		"XML_EXPORT" => "N",
		"SECTION_TITLE" => "-",
		"SECTION_DESCRIPTION" => "-",
		"POPUP_POSITION" => "left",
		"SEF_RULE" => "/examples/books/#SECTION_ID#/filter/#SMART_FILTER_PATH#/apply/",
		"SECTION_CODE_PATH" => "",
		"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],
		"CURRENCY_ID" => "RUB"
	),
	false
);?>


Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
12
Андрей Шварёв
Фильтр генерирует url вида arFilter_<ид свойства>_<некий код>.

Задача: взяв параметры фильтра из урл, использовать их для своих компонентов и фильтраций.

<некий код> = abs( crc32( "значение свойства" ) ) - т.е. это просто crc32 сумма от строки, взятая по модулю.
В базе, в таблице b_iblock_<ид нужного инфоблока>_index_val содержится весь перечень возможных значений. Высчитываем abs(crc32()) от каждого из значений, и формируем массив вида $arr = array( abs(crc32( "значение" ) ) => "значение", ... ), и далее - получаем искомое текстовое представление $arr[ "<искомый crc32 код>" ].


Пример кода:

Код
global $DB;

$arFILTER = explode("&", $UF_FILTER_LINK);
foreach ($arFILTER as $k=>$v) {
 unset($arFILTERFULL);
 unset($arFILTERVAL);
 if (substr_count($v,"arrFilter")>0) {
 $arFILTERFULL = explode("=", $v);
 $arFILTERVAL = explode("_", str_replace("arrFilter_","",$arFILTERFULL[0]));
 $arFILTERCRC[$arFILTERVAL[0]][] = $arFILTERVAL[1];
 }
}

$res = $DB->Query("SEL ECT * FR OM b_iblock_16_index_val", false, $err_mess.__LINE__);
while ($row = $res->Fetch()) {
 $arrDBVALS[abs(crc32($row["VALUE"]))] = $row["VALUE"];
}

foreach ($arFILTERCRC as $prop=>$val) {
 foreach ($val as $crc32) {
 if ($arrDBVALS[$crc32]) {
 $arFILTERNORMAL[$prop][] = $arrDBVALS[$crc32];
 }
 }
} 

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

Было бы здорово, если бы в будующих версиях продукта, в этой таблице появился столбец с уже вычисленными кодами, чтобы не формировать каждый раз большие массивы из всей таблицы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх