Таблица oc_custom_field
Таблица oc_custom_field является ядром системы пользовательских полей в OpenCart. Она хранит мета-информацию о каждом созданном поле: его тип, расположение, статус и настройки валидации. Сами значения полей хранятся в других таблицах (например, oc_address.custom_field, oc_customer.custom_field) в формате JSON.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
custom_field_id |
int |
Уникальный идентификатор пользовательского поля (первичный ключ). |
type |
varchar(32) |
Тип поля. Определяет, как поле будет отображаться в форме.
Возможные значения: select (выпадающий список), radio (радиокнопки), checkbox (флажки), text (однострочное текстовое поле), textarea (многострочное текстовое поле), file (загрузка файла), date (календарь), time (время), datetime (дата и время).
|
value |
text |
Значения по умолчанию или варианты выбора для полей типов select, radio, checkbox. Данные хранятся в формате JSON, где каждый вариант представляет собой пару "значение: метка".
|
validation |
varchar(255) |
Правило валидации для поля. Например: email, url, regex. Для использования регулярного выражения значение должно начинаться с regex[.
|
location |
varchar(10) |
Расположение поля, т.е. к какой сущности системы оно привязано.
Возможные значения: account (учетная запись клиента), address (адрес), affiliate (партнерская программа), payment_address (адрес оплаты), shipping_address (адрес доставки), product (товар), order (заказ).
|
status |
tinyint(1) |
Статус поля: 1 (включено) или 0 (выключено). Выключенные поля не отображаются в формах.
|
sort_order |
int |
Порядок сортировки. Определяет позицию поля относительно других полей в одной и той же форме. |
Как это работает
Администратор создает новое пользовательское поле через админ-панель OpenCart (Система → Настройка → Пользовательские поля). При этом в таблицу oc_custom_field добавляется новая запись с указанием типа, расположения и других параметров.
Для поддержки многоязычности названий полей и их вариантов выбора используется связанная таблица oc_custom_field_description, которая хранит переводы для каждого custom_field_id.
Когда пользователь заполняет форму (регистрация, добавление адреса, оформление заказа), система отображает активные поля (status = 1) для соответствующего location. После отправки формы значения этих полей сериализуются в JSON и сохраняются в соответствующем поле custom_field целевой таблицы (например, oc_customer.custom_field).
Поля с типами select, radio, checkbox используют данные из поля value, которые хранятся в виде JSON-массива. Например: {"1": "Вариант 1", "2": "Вариант 2"}.
Пример SQL-запроса
Выбрать все активные пользовательские поля для адреса доставки:
SELECT cf.custom_field_id, cfd.name, cf.type, cf.value
FROM oc_custom_field cf
LEFT JOIN oc_custom_field_description cfd ON (cf.custom_field_id = cfd.custom_field_id)
WHERE cf.status = 1
AND cf.location = 'shipping_address'
AND cfd.language_id = 1
ORDER BY cf.sort_order;
Смотрите также
-
таблицу
oc_custom_field_description,
которая хранит многоязычные описания полей -
таблицу
oc_custom_field_value,
которая хранит многоязычные значения для вариантов выбора -
таблицу
oc_custom_field_customer_group,
которая определяет видимость полей для разных групп покупателей -
таблицу
oc_customer,
в которой хранятся значения кастомных полей для клиентов