Умный фильтр — компонент, который собирает боковую панель отбора по свойствам каталога автоматически: сам находит используемые характеристики, сам считает количество товаров по каждому значению и сам формирует ЧПУ-адреса для комбинаций.
Разберём, как подключить catalog.smart.filter, какие параметры на самом деле
влияют на результат и почему без фасетного индекса он рано или поздно упрётся в скорость.
Как устроен компонент
В отличие от обычного фильтра, который верстают руками под конкретный список полей, умный фильтр строит панель динамически: анализирует товары в текущем разделе и выводит только те свойства, у которых есть хотя бы два разных значения. Свойство с одним значением на весь раздел смысла фильтровать не имеет — компонент сам его скрывает.
<$APPLICATION->IncludeComponent(
'bitrix:catalog.smart.filter',
'main',
[
'IBLOCK_TYPE' => 'catalog',
'IBLOCK_ID' => 5,
'SECTION_ID' => $arResult['VARIABLES']['SECTION_ID'],
'SEF_MODE' => 'Y',
'XML_EXPORT' => 'N',
'SAVE_IN_SESSION' => 'N',
'FILTER_NAME' => 'arrFilter',
'PRICE_CODE' => ['BASE'],
'CACHE_TYPE' => 'A',
'CACHE_TIME' => 36000000,
'DISPLAY_ELEMENT_COUNT' => 'Y',
'TEMPLATE_THEME' => 'blue',
]
);?>
Разберём параметры, которые реально влияют на поведение фильтра.
| Параметр | За что отвечает |
|---|---|
SECTION_ID |
Раздел, в границах которого строится фильтр — обязательно передавать текущий |
FILTER_NAME |
Имя переменной, куда компонент кладёт условия для последующей выборки товаров |
PRICE_CODE |
Типы цен, по которым строится ползунок стоимости |
SAVE_IN_SESSION |
Запоминать ли выбор фильтра между визитами |
DISPLAY_ELEMENT_COUNT |
Показывать ли число товаров рядом с каждым значением |
XML_EXPORT |
Формировать ли данные для внешних систем — на публичной части не нужно |
Связка с выводом товаров
Сам умный фильтр товары не выводит — он готовит массив условий и кладёт его
в переменную, заданную FILTER_NAME. Дальше этот массив передаётся
в компонент вывода списка:
<$APPLICATION->IncludeComponent(
'bitrix:catalog.section',
'main',
[
'IBLOCK_TYPE' => 'catalog',
'IBLOCK_ID' => 5,
'SECTION_ID' => $arResult['VARIABLES']['SECTION_ID'],
'FILTER_NAME' => 'arrFilter',
'PAGE_ELEMENT_COUNT' => 24,
'SEF_MODE' => 'Y',
]
);?>
Значение FILTER_NAME в обоих компонентах должно совпадать буквально.
Разное написание — самая частая причина, когда фильтр отображается, реагирует
на клики, но список товаров не меняется вообще.
Нужна помощь с Битрикс?
Свойства и умный фильтр
Не любое свойство инфоблока автоматически попадает в панель. У свойства должна быть включена галочка «Использовать в умном фильтре» — она задаётся в настройках свойства инфоблока.
Что стоит учитывать при выборе свойств для фильтра:
- Справочники и списки фильтруются быстро — компонент сравнивает готовые значения.
- Текстовые свойства со свободным вводом фильтровать не стоит. «Дуб» и «дуб натуральный» станут для фильтра разными значениями.
- Числовые свойства выводятся диапазоном — ползунком, как цена.
- Слишком много свойств в фильтре замедляет построение панели и перегружает интерфейс для покупателя — используйте только то, чем реально выбирают товар.
Производительность
Для каждого показа фильтр должен посчитать, сколько товаров соответствует каждому возможному значению каждого свойства с учётом уже выбранных условий. Без специальной подготовки данных это означает соединение нескольких таблиц свойств при каждой перестройке панели.
На каталоге в несколько тысяч позиций разница едва заметна. На каталоге в десятки тысяч фильтр начинает заметно тормозить — именно для этого существует фасетный индекс, который раскладывает значения свойств в одну плоскую таблицу заранее. Подробный разбор — в статье Фасетный индекс в Битрикс: ускорение умного фильтра.
Практический ориентир: если в каталоге больше пяти тысяч товаров и фильтр участвует хотя бы по трём свойствам, включать индекс нужно сразу, не дожидаясь жалоб на скорость.
ЧПУ для комбинаций фильтра
При включённом SEF_MODE компонент сам формирует человекопонятные
адреса для комбинаций значений:
/catalog/mebel/stoly/color-belyj/material-massiv/
Плюс в том, что такие страницы можно продвигать как самостоятельные посадочные. Минус — комбинаций возникает очень много, и без ограничений индексации все они попадают в поиск как почти одинаковые страницы.
Разумная практика — открывать для индексации только те комбинации, которые
реально ищут покупатели, а остальные закрывать через noindex
или правила в robots.txt. Подробно эта проблема и её решения
разобраны в статье
Дубли страниц в Битрикс: как найти и закрыть.
Кеширование
Умный фильтр кешируется отдельно от списка товаров — своим блоком, со своим временем жизни. Важная деталь: в ключ кеша обязательно должен входить идентификатор раздела и текущее состояние выбранных условий, иначе один посетитель увидит панель, посчитанную для чужого набора фильтров.
При типе кеширования «Авто» компонент справляется с этим сам. Если кеш переопределяется вручную, проверьте, что состояние фильтра действительно участвует в формировании ключа.
Оформление панели
Стандартный шаблон компонента редко подходит без доработки. Кастомизация делается копированием шаблона в свой каталог шаблонов — тот же принцип, что и у остальных компонентов Битрикс:
/local/templates/main/components/bitrix/catalog.smart.filter/main/
template.php
style.css
script.js
Внутри template.php доступен массив $arResult['ITEMS']
со всеми свойствами и их значениями — вёрстку панели можно собрать полностью
под макет дизайнера, логика подсчёта при этом не меняется.
Частые проблемы
| Симптом | Причина |
|---|---|
| Фильтр не влияет на список товаров | Разные FILTER_NAME в двух компонентах |
| Свойство не появляется в панели | Не включена галочка «Использовать в умном фильтре» |
| Все значения показывают одинаковое число товаров | Устаревший кеш или не пересчитан фасетный индекс |
| Панель строится очень медленно | Не включён фасетный индекс на большом каталоге |
| Комбинации фильтра забивают индекс поисковика | Все ЧПУ-адреса открыты без ограничений |
Итог
Умный фильтр в Битрикс собирается связкой двух компонентов —
catalog.smart.filter для панели и catalog.section
для списка, соединённых общим значением FILTER_NAME. Свойства
попадают в фильтр только с явно включённой галочкой, а сам список значений
формируется автоматически на основе реальных товаров раздела.
На каталоге среднего размера всё работает из коробки. С ростом ассортимента на первый план выходят два вопроса: фасетный индекс для скорости и ограничение индексации для комбинаций фильтра — без них умный фильтр из удобства превращается в источник и тормозов, и мусора в поисковой выдаче.
