Умный фильтр в битриксе — настолько ли умный

Умный фильтр в битриксе — настолько ли умный

Как работает стандартный смарт-фильтр в Битриксе из коробки и в большинстве готовых решений. Разберем на нескольких примерах.

Пример 1

Допустим, что весь каталог состоит из товаров с торговыми предложениями. Для примера возьмем одежду и разберем один из товаров:

Базовый товар: Футболка

Свойства базового товара:

  • Наименование
  • Описание
  • Бренд

У данного базового товара есть торговые предложения, которые состоят из свойств:

  • Цвет
  • Размер

Допустим, мы хотим настроить фильтр в разделе «Футболки», который должен позволять фильтровать футболки по бренду, цвету и размеру.

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

Пример 2

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

Базовый товар: Диван

Свойства базового товара:

  • Наименование
  • Описание
  • Бренд

У данного базового товара есть торговые предложения, которые имеют свойство

  • Цвет обивки

Однако некоторые модели диванов существуют только в одном цвете. 

Для единообразия можно было бы для таких диванов создавать базовый товар с одним торговым предложением, но реальность такова, что далеко не во всех случаях такой подход устраивает владельца магазина. Это может быть связано и с особенностями каталога, заведенного в 1С, и с простым желанием сэкономить время штатных контент-менеджеров, которым бы пришлось создавать два элемента в админке сайта вместо одного.

Поэтому представим, что для диванов, существующих в одном цвете, мы создаем простой товар вместо товара с торговыми предложениями. 

По понятным причинам в каталоге появляется еще один тип товара:

Простой товар: Диван

Свойства:

  • Наименование
  • Описание
  • Бренд
  • Цвет обивки

Обратите внимание, что свойство «Цвет обивки» теперь используется еще и в простых товарах. А это значит, что фильтр должен теперь учитывать и это свойство и выдавать адекватный результат пользователю.

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

Для битрикса свойство «Цвет обивки» торгового предложения и одноименное свойство простого товара — это разные свойства. Поэтому в фильтре эти свойства выведутся по отдельности. То есть, буквально, пользователь увидит в фильтре два свойства “Цвет обивки”, одно из которых будет фильтровать по простым товарам, другое — по товарам с торговыми предложениями. 

Ключевая проблема в том, что если задать одновременно 2 цвета, то фильтр ничего не найдет. Можно отдельно получить выборку по одному свойству цвета и отдельно — по другому. То есть, по одному свойству он выдаст все базовые и все простые товары заданного цвета, а по другому — все торговые предложения заданного цвета с привязанными к ним базовыми товарами. А выбрать всё сразу не получится.

Почему так?

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

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

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

Что с этим делать

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

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

Казалось бы, очевидная логика, но в коробке ее нет. 

Для таких случаев мы разработали свое решение для фильтра, которое успешно решает описанный кейс и которое мы предлагаем в том числе рамках разработки в формате «Быстро и недорого».

Есть проект? Свяжитесь с нами.
Дальше: Как защитить форму от спама
Напишите нам
Загрузка...
Спасибо
Загрузка...