Умный фильтр в 1С-Битрикс — это не отдельный модуль, а связка свойств инфоблока, компонента bitrix:catalog.smart.filter и фасетного индекса. Собрать его с нуля несложно, если понимать, откуда фильтр берёт значения и почему без индекса он тормозит.
Что такое умный фильтр и как он устроен
Умный фильтр — штатный механизм редакций «Малый бизнес» и «Бизнес», который строит панель фильтрации автоматически по свойствам товаров. Он не хранит собственных данных: значения для чекбоксов, диапазонов цен и выпадающих списков он вытягивает из свойств инфоблока каталога и из цен модуля catalog.
Технически всё держится на трёх элементах:
- Свойства инфоблока — то, по чему фильтруем (бренд, цвет, диагональ, наличие);
- Компонент
bitrix:catalog.smart.filter— рисует форму фильтра и формирует GET-запрос; - Компонент
bitrix:catalog.section(илиcatalog) — принимает результат фильтрации через параметрFILTER_NAMEи выводит отфильтрованные товары.
Ключевая деталь: фильтр и список товаров связываются по имени переменной фильтра. У обоих компонентов оно должно совпадать, иначе выбор в панели не повлияет на выдачу.
catalog, фильтровать по цене и наличию не выйдет.Подготовка свойств инфоблока
Фильтр строится только по тем свойствам, у которых включён флаг «Показывать в умном фильтре». Настройка живёт в карточке свойства: Контент → Инфоблоки → каталог → Свойства → [свойство], поле «Отображение в умном фильтре».
Доступно несколько типов отображения, и выбор влияет на UX:
| Тип свойства | Отображение в фильтре |
|---|---|
| Список / привязка к справочнику (highload) | Чекбоксы или выпадающий список |
| Число | Диапазон «от — до» (слайдер) |
| Да/Нет (флаг) | Одиночный чекбокс |
| Цвет / картинка (пользовательские настройки) | Цветовые плашки, размеры |
Рекомендации из практики:
- Свойства типа «Список» и справочники highload-блоков фильтруются быстрее строковых — их значения нормализованы;
- Не выводите в фильтр свойства с сотнями уникальных значений (например, точную модель) — панель станет нечитаемой;
- Наличие удобно выносить в отдельное свойство-флаг или использовать штатный фильтр по остаткам.
Фасетный индекс — почему без него медленно
Без фасетного индекса каждый клик по фильтру превращается в тяжёлый JOIN по таблицам значений свойств. На каталоге в тысячи позиций это секунды ожидания. Фасетный индекс — денормализованная таблица, где заранее посчитаны все комбинации «свойство → значение → товары», поэтому выборка идёт по одному индексу.
Включается он на вкладке «Свойства» инфоблока, блок «Настройки фасетного индекса». После включения индекс нужно построить кнопкой «Переиндексировать» — Битрикс пройдёт по всем элементам и заполнит таблицу.
Для больших каталогов индекс имеет смысл строить по расписанию в фоне (агент CIBlockSectionIndex и связанные механизмы), а не при каждом сохранении товара.
Вывод компонента на страницу
В шаблоне раздела каталога размещаются два связанных компонента. Сначала фильтр:
$APPLICATION->IncludeComponent('bitrix:catalog.smart.filter', 'template', array('IBLOCK_TYPE' => 'catalog', 'IBLOCK_ID' => $iblockId, 'FILTER_NAME' => 'arrFilter', 'SECTION_ID' => $sectionId));
Затем список товаров, которому передаём тот же FILTER_NAME:
$APPLICATION->IncludeComponent('bitrix:catalog.section', '', array('IBLOCK_ID' => $iblockId, 'FILTER_NAME' => 'arrFilter'));
Что здесь критично:
- FILTER_NAME у обоих компонентов идентичен (
arrFilter) — это глобальная переменная-массив, через которую фильтр передаёт условия; - Умный фильтр обычно уже встроен в комплексный компонент
bitrix:catalog— при использовании готового решения отдельно подключать его не нужно, достаточно включить опцию в настройках комплексного компонента; - Шаблон компонента задаёт вёрстку — типовой
.defaultлегко кастомизируется через копию в/local/templates/.
ЧПУ и SEO-параметры фильтра
По умолчанию фильтр формирует ссылки с GET-параметрами вида ?set_filter=Y&arrFilter_... — они не индексируются и выглядят некрасиво. Чтобы получить человекопонятные адреса вроде /catalog/smartfony/apple/chernyy/, включается механизм SEO-фильтра (ЧПУ).
Настраивается он на вкладке «SEO» инфоблока: задаётся шаблон адреса, порядок кодов свойств и правило в urlrewrite.php, которое направляет такие URL на компонент. Дополнительно на вкладке SEO задаются шаблоны title, description и H1 для страниц фильтра — так каждая комбинация становится посадочной страницей.
Типовые ошибки при настройке
Чаще всего фильтр «не работает» по одной из предсказуемых причин:
- Не совпадает FILTER_NAME — фильтр отправляет условия в
arrFilter, а список товаров читает другую переменную; выбор игнорируется; - Не построен фасетный индекс — после включения свойств забыли нажать «Переиндексировать», фильтр пуст или показывает старые значения;
- Свойство не помечено для фильтра — флаг «Отображение в умном фильтре» стоит в положении «Не показывать»;
- Кэш компонента — включён кэш умного фильтра, а после обмена с 1С он не сбросился; новые значения не появляются до очистки кэша;
- Инфоблок без привязки к каталогу — фильтрация по цене и наличию недоступна.
Отдельная категория — производительность: фильтр работает, но раздел открывается медленно. Здесь смотрят на фасетный индекс, кэширование компонентов и общую оптимизацию каталога.
Итог
Умный фильтр в Битрикс собирается из четырёх шагов: пометить нужные свойства инфоблока как фильтруемые, включить и построить фасетный индекс, вывести связанные компоненты catalog.smart.filter и catalog.section с общим FILTER_NAME, а затем при необходимости навесить ЧПУ и SEO-шаблоны. Главные подводные камни — забытая переиндексация и рассинхрон имени переменной фильтра.
Если каталог большой, загружается из 1С и фильтр начинает тормозить, мы в B2Bsite настраиваем фасетный индекс, автоматическую переиндексацию в обмене и кэширование, а также разворачиваем SEO-фильтр с посадочными страницами под спрос. Обращайтесь — соберём и ускорим каталог под вашу нагрузку.
Частые вопросы
В какой редакции Битрикс доступен умный фильтр?
Умный фильтр входит в редакции «Малый бизнес» и «Бизнес», а также в «Энтерпрайз». В «Старте» его нет, так как отсутствует модуль торгового каталога.
Обязательно ли строить фасетный индекс?
Фильтр будет работать и без индекса, но на каждый запрос пойдут тяжёлые выборки по таблицам свойств. На каталоге больше нескольких сотен товаров без фасетного индекса страница ощутимо тормозит.
Почему после загрузки товаров из 1С в фильтре нет новых значений?
Фасетный индекс не обновляется автоматически после массового импорта. Нужно переиндексировать инфоблок вручную или добавить переиндексацию в скрипт обмена, а также сбросить кэш компонента.
Как связать фильтр со списком товаров?
У компонента умного фильтра и у компонента вывода товаров должен совпадать параметр FILTER_NAME — например, arrFilter. Через эту глобальную переменную фильтр передаёт условия в выборку.
Можно ли фильтровать по цене и наличию?
Да, но только если инфоблок привязан к торговому каталогу модуля catalog. Фильтр по цене строится по типам цен, а наличие — по остаткам складов или отдельному свойству-флагу.
Как сделать красивые адреса вместо GET-параметров?
Нужно включить SEO-фильтр (ЧПУ) на вкладке SEO инфоблока, задать шаблон URL и добавить правило в urlrewrite.php. Тогда комбинации значений превращаются в человекопонятные адреса и посадочные страницы.
Почему свойство не появляется в панели фильтра?
Скорее всего, у свойства не выставлен флаг «Отображение в умном фильтре». Проверьте карточку свойства инфоблока и после изменения переиндексируйте фасетный индекс.
Умный фильтр нужно подключать отдельным компонентом?
Если вы используете комплексный компонент bitrix:catalog, умный фильтр включается его настройкой и подключать отдельно не требуется. Отдельный компонент catalog.smart.filter нужен при сборке страницы из простых компонентов.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.