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

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

Создание новых полей для расширения стандартных моделей 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
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. Удаляется колонка из таблицы БД