Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
22 of 152 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Начало 11 ноября. Жми для записи!

Таблица oc_filter

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

Поля

Поле Тип данных Описание
filter_id int Уникальный идентификатор фильтра. Первичный ключ таблицы.
filter_group_id int Внешний ключ, который связывает фильтр с группой фильтров. Ссылается на таблицу oc_filter_group.
sort_order int Порядок сортировки фильтра внутри своей группы. Определяет последовательность отображения значений фильтра на странице.

Как это работает

Система фильтров в OpenCart организована по принципу иерархии: Группа фильтров → Фильтры. Например, группа фильтров "Цвет" может содержать фильтры: "Красный", "Синий", "Зеленый". Группа "Размер" может содержать фильтры: "S", "M", "L".

Каждому товару в административной панели можно назначить один или несколько фильтров из различных групп. Это делается через редактирование товара в разделе "Данные" → вкладка "Связи" → блок "Фильтры".

Связь между товарами и фильтрами осуществляется через таблицу oc_product_filter, где хранятся пары product_id и filter_id.

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

Многоязычные названия фильтров хранятся в отдельной таблице oc_filter_description, которая связана с oc_filter по полю filter_id.

Пример SQL-запроса

Получить все фильтры с их названиями для определенной группы можно следующим запросом:

SELECT f.filter_id, fd.name, fg.sort_order as group_order, f.sort_order FROM oc_filter f LEFT JOIN oc_filter_description fd ON (f.filter_id = fd.filter_id) LEFT JOIN oc_filter_group fg ON (f.filter_group_id = fg.filter_group_id) WHERE f.filter_group_id = 3 AND fd.language_id = 1 ORDER BY f.sort_order ASC;

Смотрите также

  • таблицу oc_filter_group,
    которая хранит группы фильтров
  • таблицу oc_filter_description,
    которая содержит многоязычные названия фильтров
  • таблицу oc_product_filter,
    которая связывает товары с фильтрами
  • таблицу oc_category_filter,
    которая определяет, какие фильтры показывать в категориях