Главная » Интернет-магазин » Умный фильтр в Битрикс: настройка catalog.smart.filter

Умный фильтр в Битрикс: настройка catalog.smart.filter

Схема умного фильтра в Битрикс: панель отбора и список товаров связаны общим значением FILTER_NAME

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

Разберём, как подключить 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. Свойства попадают в фильтр только с явно включённой галочкой, а сам список значений формируется автоматически на основе реальных товаров раздела.

    На каталоге среднего размера всё работает из коробки. С ростом ассортимента на первый план выходят два вопроса: фасетный индекс для скорости и ограничение индексации для комбинаций фильтра — без них умный фильтр из удобства превращается в источник и тормозов, и мусора в поисковой выдаче.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний