Skip to content
MiniShop3
MiniShop3
Современный компонент интернет-магазина для MODX 3
  1. Компоненты
  2. MiniShop3
  3. Интерфейс админки
  4. Утилиты
  5. Дополнительные поля

Утилиты: Дополнительные поля

Свои колонки к моделям MiniShop3 без правки ядра. Поле пишется в БД и появляется в формах менеджера.

Назначение

Создаёте ключ, тип виджета и тип колонки. После применения миграции колонки поле доступно в карточке модели и (для товара) в импорте CSV.

Поддерживаемые модели

МодельОписание
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Выбор опцииВарианты товара
ms3-repeaterТаблица строк (JSON)Состав, характеристики списком
ms3-key-valueКлюч → значение (JSON)Набор именованных свойств

Repeater (ms3-repeater)

С v1.12. В properties / конфиге виджета задают repeater_config:

json
{
  "columns": [
    { "key": "name", "label": "Название" },
    { "key": "qty", "label": "Кол-во", "type": "number" }
  ],
  "minRows": 0,
  "maxRows": 50,
  "sortable": true,
  "rankField": "rank"
}

В БД обычно колонка json. В импорт CSV repeater не попадает.

Key-value (ms3-key-value)

Конфиг key_value_config:

json
{
  "mode": "fixed",
  "keys": [
    { "key": "width", "label": "Ширина", "valueType": "number", "required": false },
    { "key": "material", "label": "Материал", "valueType": "string", "required": true }
  ]
}

mode: fixed (только заданные ключи) или free (покупатель/менеджер добавляет пары).

Тип данных БД (dbtype)

ТипОписаниеПример значений
varcharСтрока переменной длиныТекст до 255 символов
textДлинный текстОписания, HTML
intЦелое числоID, количества
decimalДесятичное числоЦены с копейками
tinyintМалое целое (0-255)Флаги, рейтинги
datetimeДата и время2024-01-15 12:30:00
timestampВременная меткаUnix timestamp
jsonJSON-данныеМассивы, объекты

Точность (precision)

Для типов varchar и decimal:

  • varchar: максимальная длина строки (по умолчанию 255)
  • decimal: формат 10,2 (10 цифр всего, 2 после запятой)

PHP-тип (phptype)

ТипОписание
stringСтрока
integerЦелое число
floatЧисло с плавающей точкой
booleanЛогическое значение
jsonJSON (автоматическое кодирование/декодирование)
datetimeОбъект DateTime
timestampUnix 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)

Для изменения этих параметров удалите поле и создайте заново.

Удаление поля

  1. Кликните на иконку удаления в строке поля
  2. Подтвердите действие в диалоговом окне

Внимание

Удаление поля безвозвратно удаляет:

  • Определение поля из схемы
  • Колонку из таблицы БД
  • Все данные этого поля для всех записей

Использование в коде

Получение значения

php
// Получить товар
$product = $modx->getObject(\MiniShop3\Model\msProduct::class, $id);

// Получить данные товара
$data = $product->getOne('Data');

// Получить значение дополнительного поля
$wholesalePrice = $data->get('wholesale_price');

Сохранение значения

php
$data = $product->getOne('Data');
$data->set('wholesale_price', 999.99);
$data->save();

В сниппетах (Fenom)

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

Тело запроса:

json
{
  "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}

Миграции

При создании поля автоматически:

  1. Создаётся запись в таблице конфигурации полей
  2. Добавляется колонка в таблицу модели (ALTER TABLE)
  3. Создаётся индекс (если указан)

При удалении поля:

  1. Удаляется запись конфигурации
  2. Удаляется колонка из таблицы БД