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

Таблица 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,
    в которой хранятся значения кастомных полей для клиентов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить