
Утилиты: Дополнительные поля
Создание новых полей для расширения стандартных моделей MiniShop3.
Назначение
Инструмент позволяет добавлять собственные поля к моделям данных без редактирования исходного кода. Поля сохраняются в базе данных и автоматически отображаются в интерфейсе.
Поддерживаемые модели
| Модель | Описание |
|---|---|
msProductData | Данные товара |
msVendor | Производитель |
msOrder | Заказ |
msOrderAddress | Адрес доставки |
msCategory | Категория |
Создание поля
Шаг 1: Выбор модели
Выберите модель из выпадающего списка в верхней части страницы.
Шаг 2: Добавление поля
Нажмите кнопку "Добавить поле" и заполните форму.
Параметры поля
Основные
| Параметр | Описание | Обязательно |
|---|---|---|
| Ключ (key) | Уникальное имя поля (латиница, snake_case) | Да |
| Название (label) | Отображаемое название | Да |
| Описание | Подсказка для пользователя | Нет |
| Активно | Поле используется | Да |
Ключ поля
Ключ должен быть уникальным в пределах модели. Используйте латиницу и подчёркивания. Например: wholesale_price, external_id, custom_field.
Тип виджета (xtype)
| Тип | Описание | Применение |
|---|---|---|
textfield | Текстовое поле | Строки, артикулы |
numberfield | Числовое поле | Цены, количества |
textarea | Многострочное поле | Описания |
xcheckbox | Флажок | Да/Нет |
ms3-combo-vendor | Выбор производителя | Связь с производителем |
ms3-combo-autocomplete | Автодополнение | Выбор из списка |
ms3-combo-options | Выбор опции | Варианты товара |
Тип данных БД (dbtype)
| Тип | Описание | Пример значений |
|---|---|---|
varchar | Строка переменной длины | Текст до 255 символов |
text | Длинный текст | Описания, HTML |
int | Целое число | ID, количества |
decimal | Десятичное число | Цены с копейками |
tinyint | Малое целое (0-255) | Флаги, рейтинги |
datetime | Дата и время | 2024-01-15 12:30:00 |
timestamp | Временная метка | Unix timestamp |
json | JSON-данные | Массивы, объекты |
Точность (precision)
Для типов varchar и decimal:
varchar— максимальная длина строки (по умолчанию 255)decimal— формат10,2означает 10 цифр всего, 2 после запятой
PHP-тип (phptype)
| Тип | Описание |
|---|---|
string | Строка |
integer | Целое число |
float | Число с плавающей точкой |
boolean | Логическое значение |
json | JSON (автоматическое кодирование/декодирование) |
datetime | Объект DateTime |
timestamp | Unix timestamp |
Значение по умолчанию
| Тип | Описание |
|---|---|
NULL | Пустое значение |
CURRENT_TIMESTAMP | Текущее время (для datetime) |
USER_DEFINED | Указать вручную |
NONE | Без значения по умолчанию |
Индексирование
| Тип | Описание | Когда использовать |
|---|---|---|
NONE | Без индекса | Редко используемые поля |
INDEX | Обычный индекс | Поля для поиска и сортировки |
UNIQUE | Уникальный индекс | Поля с уникальными значениями |
FULLTEXT | Полнотекстовый индекс | Поиск по тексту |
Примеры полей
Оптовая цена
Ключ: wholesale_price
Название: Оптовая цена
xtype: numberfield
dbtype: decimal
Precision: 12,2
phptype: float
Default: NULL
Index: NONEВнешний ID (1С)
Ключ: external_id
Название: ID в 1С
xtype: textfield
dbtype: varchar
Precision: 50
phptype: string
Default: NULL
Index: UNIQUEСрок доставки
Ключ: delivery_days
Название: Срок доставки (дней)
xtype: numberfield
dbtype: int
phptype: integer
Default: USER_DEFINED → 3
Index: NONEДополнительные характеристики (JSON)
Ключ: extra_attributes
Название: Доп. характеристики
xtype: textarea
dbtype: json
phptype: json
Default: NULL
Index: NONEРедактирование поля
Кликните на строку поля в таблице для открытия диалога редактирования.
Ограничения
Некоторые параметры нельзя изменить после создания:
- Ключ поля
- Тип данных БД (dbtype)
Для изменения этих параметров удалите поле и создайте заново.
Удаление поля
- Кликните на иконку удаления в строке поля
- Подтвердите действие в диалоговом окне
Внимание
Удаление поля безвозвратно удаляет:
- Определение поля из схемы
- Колонку из таблицы БД
- Все данные этого поля для всех записей
Использование в коде
Получение значения
// Получить товар
$product = $modx->getObject(\MiniShop3\Model\msProduct::class, $id);
// Получить данные товара
$data = $product->getOne('Data');
// Получить значение дополнительного поля
$wholesalePrice = $data->get('wholesale_price');Сохранение значения
$data = $product->getOne('Data');
$data->set('wholesale_price', 999.99);
$data->save();В сниппетах (Fenom)
{$wholesale_price}
{if $wholesale_price > 0}
<span class="wholesale">Оптом: {$wholesale_price | number_format : 0} руб.</span>
{/if}API Endpoints
Список полей модели
GET /api/mgr/extra-fields?class=MiniShop3\Model\msProductDataСоздание поля
POST /api/mgr/extra-fieldsТело запроса:
{
"class": "MiniShop3\\Model\\msProductData",
"key": "wholesale_price",
"label": "Оптовая цена",
"xtype": "numberfield",
"dbtype": "decimal",
"precision": "12,2",
"phptype": "float",
"null": true,
"default": "NULL",
"index_type": "NONE",
"active": true
}Обновление поля
PUT /api/mgr/extra-fields/{id}Удаление поля
DELETE /api/mgr/extra-fields/{id}Миграции
При создании поля автоматически:
- Создаётся запись в таблице конфигурации полей
- Добавляется колонка в таблицу модели (ALTER TABLE)
- Создаётся индекс (если указан)
При удалении поля:
- Удаляется запись конфигурации
- Удаляется колонка из таблицы БД
