Фильтр товаров

Фильтр помогает покупателю подобрать товары по характеристикам, цене и наличию. Вы решаете, где он стоит на странице, какие свойства в него попадают, как выглядит каждый пункт и что покупатель увидит в подсказке.

Фильтр слева или сверху

Откройте ASTDESIGN → МаркетПро → Настройки, вкладка Каталог, блок Списки товаров и разделы, поле Вид страницы каталога:


Фильтр слева — вертикальный фильтр в колонке, товары справа. Вариант по умолчанию, подходит, когда свойств много: список можно прокручивать, и он не отнимает высоту у товаров.


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


Настройка действует на весь каталог: отдельному разделу свой вид фильтра задать нельзя.

При горизонтальном фильтре в строке над товарами стоят только свойства с галочкой Показывать в горизонтальном фильтре сразу — каждое раскрывается вниз списком. Все свойства, включая остальные, собраны в панели Все фильтры. Галочка ставится в настройках свойства: Контент → Инфоблоки → Типы инфоблоков → Каталог → Товары, вкладка Свойства, нужное свойство.

Какие свойства попадают в фильтр

Состав фильтра задаётся у свойств инфоблока: свойство участвует в фильтре, если для него включён показ в умном фильтре. Это штатная настройка 1С-Битрикс — она описана в документации 1С-Битрикс.

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

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

  • включён ли у свойства показ в умном фильтре;

  • заполнено ли свойство хотя бы у одного активного товара раздела;

  • не пуст ли фасетный индекс — об этом ниже.

Как выглядит пункт фильтра

Вид задаётся в настройках свойства, поле Вид отображения в фильтре:

Чекбокс — список значений с флажками. Вариант по умолчанию.

Изображения — вместо флажков картинки: обычно так делают цвет или фактуру. Как подготовить картинки — в статье «Изображения в фильтре товаров».

Числовые свойства и цена превращаются в диапазон «от» и «до» автоматически, отдельной настройки для них нет. Если покупатель выставил ползунки в крайние значения, решение считает, что фильтр по этому свойству не задан, и не подмешивает его в адрес страницы.


Свёрнутые и развёрнутые пункты

Каждый пункт фильтра сворачивается и разворачивается кликом по заголовку. Каким покупатель увидит пункт при открытии раздела, задаёт штатная галочка Битрикса Показать развёрнутым в настройках свойства для умного фильтра — там же, где включается сам показ в фильтре. Галочка стоит — пункт развёрнут, снята — свёрнут, виден только заголовок.


Всегда развёрнуты:

  • цена;

  • пункт, в котором покупатель уже выбрал значение.

Это действует в фильтре слева, в панели Все фильтры фильтра сверху и в мобильной версии. На пункты в строке фильтра сверху галочка не влияет: они и так раскрываются по клику.

Подсказка у пункта фильтра

Рядом с названием пункта можно показать значок ⓘ с пояснением — например, объяснить, как измерить размер, или показать таблицу соответствия.

Заполните у свойства поле Подсказка (html). В подсказку можно положить не только текст: решение разберёт содержимое и покажет картинки, видео, ролик с YouTube и скрипты, если они там есть.

Если поле Подсказка (html) не заполнено, решение возьмёт подсказку из настроек умного фильтра у раздела, а если и там пусто — из подсказки самого свойства.

Если фильтр не находит товары или работает медленно

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

Решение: решение строит и достраивает индекс само, в фоновых задачах — вам нужно только убедиться, что они запускаются. За индекс отвечают две задачи cron:

  • facet — создаёт индекс, если у инфоблока каталога он помечен как незавершённый;

  • checkFacet — достраивает индекс по очереди товаров, изменённых после последнего прохода.

Как проверить, что фоновые задачи решения работают, написано в статье «cron».

Если после большой загрузки товаров фильтр несколько минут показывает неполные данные — это нормально, индекс достраивается в фоне.

Индекс не строится после прерванного обмена с 1С

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

Причина: на время обмена решение ставит паузу на пересоздание индекса — иначе индекс перестраивался бы на каждом шаге загрузки. Пауза — это файл-метка. Обычный обмен снимает её сам, а прерванный оставляет: индекс не будет пересоздаваться, пока метка лежит на месте.

Решение: удалите файл-метку. Зайдите на сервер по SSH или через WinSCP под пользователем сайта и откройте каталог:

/bitrix/modules/astdesign.marketpro/files/

Удалите файл stopFacet.lock, если он там есть:

rm /home/bitrix/www/bitrix/modules/astdesign.marketpro/files/stopFacet.lock

Путь до корня сайта у вас может отличаться — подставьте свой. После удаления дождитесь следующего запуска задачи facet: индекс начнёт строиться, и свойства вернутся в фильтр. Проверять удобно на разделе, где точно есть товары с заполненными свойствами.

Второй способ — просто выполнить обмен с 1С до конца: пройдя загрузку товаров, он снимает метку сам.

Рядом в этом же каталоге лежат facet.lock и checkFacets.lock — они означают «задача уже работает, второй раз не запускать». Их удалять не нужно: решение снимает их само, если задача не завершилась вовремя — через час для facet.lock и через полчаса для checkFacets.lock.