Фильтрация по характеристикам товаров (запрос char)

Запросы char имеют такую же структуру, как запросы pick, и используются в интернет-магазинах для фильтрации товаров по характеристикам. Здесь мы рассмотрим только сам принцип.

С конкретной реализацией можно познакомиться на примере комплекта шаблонов интернет-магазина shop. Документация находится в описании шаблона shop/catalog/goods/characteristics/filter.

Фильтрация товаров с единой структурой характеристик

Допустим, у нас имеется каталог товаров с возможностью выбора категории товара. Чтобы сделать выборку товаров определенной категории нужно сделать такой запрос:
?page=2&block=22&p[1]=11, где:
22 – номер блока, где хранятся данные о товарах;
11 – номер категории, который хранится в поле 1 в том же товарном блоке.

Если нужно отфильтровать товары в интервале цен от 100 до 200, то нужно сделать запрос такого вида:
?page=2&block=22&p[1]=11&pick[2][ge]=100&pick[2][le]=200.
Подразумевается, что цена хранится в поле 2 товарного блока.

Фильтрация товаров с различной структурой характеристик

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

Нам придется для каждой категории создать отдельный блок со своим шаблоном характеристик. Теперь одновременно с запросами к товарному блоку мы можем делать запросы к полям блока характеристик. Запросы char имеют такую же структуру, как запросы pick, но выборку производят не по товарному блоку, а по блоку характеристик, поэтому номер этого блока нужно указать в запросе.
?page=2&block=22&p[1]=11&charblock=23&charfield=9&char[1][eq]&char[2][ge]=1000&char[2][le]=2000, где:
charblock=23 – это номер блока с характеристиками товара;
charfield=9 – номер поля в товарном блоке, в котором хранится номер записи из блока характеристик, соответствующий данному товару.

Для создания стандартного механизма фильтрации по характеристикам в интернет-магазине Shop, ознакомьтесь с комплектом шаблонов "shop/catalog/goods/characteristics/". Описание дано в файле "characteristics.md".

См. также