Таблица oc_option
Таблица oc_option является центральной в системе опций OpenCart и хранит их основные определения. Опции позволяют предлагать покупателям различные вариации товара (например, размер, цвет), дополнительные услуги (например, гравировку) или собирать любую другую информацию при заказе.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
option_id |
int |
Уникальный идентификатор опции. Первичный ключ таблицы. |
type |
varchar(32) |
Тип опции, определяющий её поведение и отображение на странице. Основные типы: select (выпадающий список), radio (радио-кнопки), checkbox (чекбоксы), text (текстовое поле), textarea (текстовая область), file (файл), date, time, datetime.
|
sort_order |
int |
Порядок сортировки опции. Определяет последовательность отображения опций на странице товара в административной панели и на витрине. |
Как это работает
Администратор магазина создает опции в разделе "Каталог → Опции". Каждая созданная опция получает запись в таблице oc_option с уникальным option_id. Поле type является критически важным, так как от него зависит логика обработки опции системой.
Для опций типов select, radio и checkbox необходимо создавать варианты выбора (значения опций). Эти значения хранятся в связанной таблице oc_option_value и связываются с опцией через поле option_id.
После создания опции её можно присвоить товарам. Связь "товар-опция" хранится в таблице oc_product_option. На витрине, на странице товара, система загружает все опции, связанные с этим товаром, и отображает их в соответствии с их типом.
Когда покупатель выбирает значение опции (например, выбирает размер из выпадающего списка) и добавляет товар в корзину, информация об выбранном значении (option_id и option_value_id или введенный текст) записывается в таблицу oc_cart, а затем переносится в заказ.
Многоязычные названия опций хранятся не в этой таблице, а в отдельной таблице oc_option_description, которая связывается по полю option_id.
Пример SQL-запроса
Выбрать все опции вместе с их переводами на русский язык и количеством связанных значений можно следующим запросом:
SELECT o.option_id, o.type, o.sort_order, od.name,
(SELECT COUNT(*) FROM oc_option_value ov WHERE ov.option_id = o.option_id) as value_count
FROM oc_option o
LEFT JOIN oc_option_description od ON (o.option_id = od.option_id AND od.language_id = 1)
ORDER BY o.sort_order ASC;
Смотрите также
-
таблицу
oc_option_value,
которая хранит значения для опций -
таблицу
oc_option_description,
которая хранит многоязычные названия опций -
таблицу
oc_product_option,
которая связывает опции с товарами -
таблицу
oc_product_option_value,
которая определяет цены и наличие для значений опций у конкретных товаров