НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
15 of 152 menu

Таблица oc_product_attribute

Таблица oc_product_attribute является связующей таблицей между товарами (oc_product) и их атрибутами (oc_attribute). Она хранит конкретные значения атрибутов для каждого товара на разных языках.

Поля

Поле Тип данных Описание
product_id int Идентификатор товара. Внешний ключ, ссылается на oc_product. Часть первичного ключа.
attribute_id int Идентификатор атрибута. Внешний ключ, ссылается на oc_attribute. Часть первичного ключа.
language_id int Идентификатор языка. Внешний ключ, ссылается на oc_language. Часть первичного ключа. Позволяет хранить разные текстовые значения атрибутов для каждого языка.
text text Текстовое значение атрибута для конкретного товара и языка. Например, для атрибута "Цвет" это может быть "Красный", а для атрибута "Размер" - "XL".

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

Администратор магазина сначала создает атрибуты в разделе "Каталог → Атрибуты". Каждый атрибут имеет название (например, "Производитель", "Материал", "Размер") и группу атрибутов.

При редактировании товара (или при его создании) на вкладке "Атрибуты" можно выбрать нужный атрибут из выпадающего списка и указать его значение для товара. Это значение и записывается в поле text.

Так как OpenCart - мультиязычная система, для каждого языка можно указать свое значение атрибута. Именно поэтому language_id является частью первичного ключа. Если магазин работает на двух языках, для одного и того же атрибута товара в этой таблице будет две записи с разными language_id и переведенным текстом в поле text.

Первичный ключ таблицы составной и состоит из трех полей: product_id, attribute_id и language_id. Это гарантирует, что для одного товара нельзя создать две одинаковые записи для одного атрибута на одном языке.

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

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

Получить все атрибуты для товара с ID 42 на русском языке (language_id = 1) можно следующим запросом:

SELECT a.name as attribute_name, agd.name as attribute_group_name, pa.text as attribute_value FROM oc_product_attribute pa LEFT JOIN oc_attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN oc_attribute_description ad ON (a.attribute_id = ad.attribute_id AND ad.language_id = pa.language_id) LEFT JOIN oc_attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN oc_attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id AND agd.language_id = pa.language_id) WHERE pa.product_id = 42 AND pa.language_id = 1 ORDER BY ag.sort_order, a.sort_order;

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

  • таблицу oc_product,
    которая содержит основные данные о товарах
  • таблицу oc_attribute,
    которая хранит определения атрибутов
  • таблицу oc_attribute_description,
    которая содержит многоязычные названия атрибутов
  • таблицу oc_attribute_group,
    которая хранит группы для сортировки атрибутов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить