Компонент подготавливает фильтр для выборки из инфоблока и выводит форму фильтра для фильтрации элементов.
Описание catalog.smart.filter
Компонент должен подключаться перед компонентом вывода элементов каталога, иначе список элементов фильтроваться не будет. Компонент стандартный, входит в дистрибутив модуля и содержит три шаблона: .default, visual_horizontal и visual_vertical. (Последние два шаблона не поддерживаются, остались для сохранения совместимости.)
В визуальном редакторе компонент расположен по пути Контент > Каталог > Умный фильтр.
Компонент относится к модулю Информационные блоки.
Параметры
Поле | Параметр | Описание |
Источник данных |
Тип инфоблока | 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
);?>
9
Андрей Шварёв
26.12.2015 13:32:50
|
Фильтр генерирует 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-2021,
«1С-Битрикс», 2021
Наверх
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.