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

Страница товара

Редактирование товара в административной панели MiniShop3.

Обзор

Страница редактирования товара (msProduct) объединяет стандартный функционал MODX с расширенными возможностями для e-commerce:

  • Редактируемые секции с полями товара
  • Галерея изображений с drag-and-drop загрузкой
  • Связи между товарами
  • Опции и характеристики
  • Дополнительные категории

Структура вкладок

Документ

Стандартная вкладка MODX с основными полями ресурса:

ПолеОписание
pagetitleНазвание товара
longtitleРасширенный заголовок
descriptionMeta description
introtextКраткое описание
contentПолное описание
aliasURL-псевдоним
parentРодительская категория

Данные товара

Вкладка с полями товара, сгруппированными по секциям. Использует Vue 3 компонент для гибкого отображения.

Стандартные секции:

СекцияПоля
Основные данныеarticle, price, old_price, weight
Наличиеremains, new, popular, favorite
Характеристикиcolor, size, vendor, made_in, tags

Настройка

Секции и поля настраиваются через Утилиты → Поля товара.

Галерея

Управление изображениями товара:

  • Загрузка через drag-and-drop
  • Сортировка перетаскиванием
  • Установка главного изображения
  • Редактирование описания

Подробнее: Галерея товара

Связи

Настройка связей между товарами:

Тип связиОписание
СопутствующиеАксессуары, комплектующие
ПохожиеАналогичные товары
РекомендуемыеПерсональные рекомендации

Категории

Дополнительные категории товара. Товар может принадлежать нескольким категориям помимо основной (parent).

Опции

Значения опций товара (если настроены в Настройки → Опции):

  • Цвета
  • Размеры
  • Материалы
  • Любые кастомные опции

Архитектура секций и полей

Хранение данных

Конфигурация полей хранится в базе данных:

ТаблицаОписание
ms3_page_sectionsСекции (разделы) страницы
ms3_product_fieldsПоля товара с настройками

Модель msPageSection

Секция — это контейнер для группировки полей.

Поля модели:

ПолеТипОписание
idintID секции
page_keystringКлюч страницы (product_data)
section_keystringУникальный ключ секции
lexicon_keystringКлюч лексикона для названия
labelstringНазвание (если без лексикона)
hiddenboolСкрыта ли секция
sort_orderintПорядок сортировки

Модель msProductField

Поле товара с настройками отображения.

Поля модели:

ПолеТипОписание
idintID поля
namestringСистемное имя поля
labelstringОтображаемое название
descriptionstringПодсказка
xtypestringТип виджета
sectionintID секции
visibleboolВидимость
requiredboolОбязательность
sort_orderintПорядок в секции
widthintШирина в процентах
configjsonДополнительные настройки
is_systemboolСистемное поле
is_defaultboolПоле по умолчанию

Управление секциями

Создание секции

Через интерфейс:

  1. Откройте Утилиты → Поля товара
  2. Нажмите "Добавить секцию"
  3. Заполните:
    • Ключ секции — уникальный идентификатор (латиница, например seo)
    • Ключ лексикона — для многоязычных названий (например ms3_section_seo)
    • Название — отображаемое название
  4. Сохраните

Через API:

POST /api/mgr/config/sections/product_data
json
{
  "section_key": "seo",
  "lexicon_key": "ms3_section_seo",
  "label": "SEO",
  "hidden": false,
  "sort_order": 100
}

Через PHP:

php
$section = $modx->newObject('MiniShop3\\Model\\msPageSection');
$section->fromArray([
    'page_key' => 'product_data',
    'section_key' => 'seo',
    'lexicon_key' => 'ms3_section_seo',
    'label' => 'SEO',
    'hidden' => false,
    'sort_order' => 100
]);
$section->save();

Редактирование секции

  1. Кликните на иконку редактирования рядом с секцией
  2. Измените параметры
  3. Сохраните

Удаление секции

Внимание

При удалении секции все её поля перемещаются в раздел "Без секции" (section = 0).

Сортировка секций

Перетащите секции в нужном порядке в левой панели.

Управление полями

Добавление нового поля

Новые поля добавляются через Утилиты → Дополнительные поля. Это создаёт:

  1. Колонку в таблице ms3_product_data
  2. Запись в ms3_product_fields

Настройка существующего поля

Через интерфейс:

  1. Откройте Утилиты → Поля товара
  2. Выберите секцию
  3. Кликните на поле для редактирования
  4. Настройте параметры:
ПараметрОписание
НазваниеОтображаемый label
ОписаниеПодсказка под полем
СекцияПринадлежность к секции
Тип виджетаТип элемента формы
ВидимостьПоказывать/скрывать
ШиринаШирина в % (50 = половина)

Через API:

PUT /api/mgr/config/page-fields/product_data
json
{
  "name": "article",
  "label": "Артикул товара",
  "section": 1,
  "visible": true,
  "sort_order": 0,
  "width": 50
}

Перемещение поля между секциями

  1. Откройте редактирование поля
  2. Выберите новую секцию в выпадающем списке
  3. Сохраните

Или измените section через API.

Сортировка полей

Перетащите поля в нужном порядке внутри секции.

Скрытие поля

  1. Откройте редактирование поля
  2. Снимите флаг "Видимость"
  3. Сохраните

Поле останется в базе данных, но не будет отображаться в карточке товара.

Типы виджетов (xtype)

Стандартные

ТипОписаниеИспользование
textfieldОднострочное текстовое полеАртикул, название
numberfieldЧисловое полеЦена, вес
textareaМногострочное полеОписание
xcheckboxФлажокnew, popular, favorite

Комбобоксы MiniShop3

ТипОписание
ms3-combo-vendorВыбор производителя
ms3-combo-categoryВыбор категории
ms3-combo-autocompleteАвтодополнение из списка
ms3-combo-optionsВыбор из значений опций

Расширенные

ТипОписание
modx-combo-browserВыбор файла через Media Browser
datefieldВыбор даты
timefieldВыбор времени
htmleditorWYSIWYG редактор

Системные настройки

НастройкаОписаниеПо умолчанию
ms3_product_tab_extraПоказывать вкладку данныхtrue
ms3_product_tab_galleryПоказывать вкладку галереиtrue
ms3_product_tab_linksПоказывать вкладку связейtrue
ms3_product_tab_optionsПоказывать вкладку опцийtrue
ms3_product_tab_categoriesПоказывать вкладку категорийtrue
ms3_product_remember_tabsЗапоминать активную вкладкуtrue
ms3_product_main_fieldsПоля вкладки "Документ"pagetitle, longtitle, ...
ms3_product_extra_fieldsДополнительные поляprice, article, ...

API Endpoints

Конфигурация полей

Получить все поля:

GET /api/mgr/config/page-fields/product_data

Ответ:

json
{
  "success": true,
  "object": {
    "fields": [
      {
        "name": "article",
        "label": "Артикул",
        "xtype": "textfield",
        "section": 1,
        "visible": true,
        "sort_order": 0,
        "width": 50
      }
    ],
    "sections": {
      "1": {
        "id": 1,
        "section_key": "main",
        "label": "Основные данные",
        "sort_order": 0
      }
    }
  }
}

Сохранить поле:

PUT /api/mgr/config/page-fields/product_data

Секции

Получить секции:

GET /api/mgr/config/sections/product_data

Создать секцию:

POST /api/mgr/config/sections/product_data

Обновить секцию:

PUT /api/mgr/config/sections/product_data/{id}

Удалить секцию:

DELETE /api/mgr/config/sections/product_data/{id}

Данные товара

Получить данные:

GET /api/mgr/product-data/{product_id}

Сохранить данные:

PUT /api/mgr/product-data/{product_id}

Примеры настройки

Создание секции "SEO"

  1. Создайте секцию:

    • Ключ: seo
    • Название: SEO
  2. Добавьте лексикон (опционально):

php
// lexicon/ru/product.inc.php
$_lang['ms3_section_seo'] = 'SEO';

// lexicon/en/product.inc.php
$_lang['ms3_section_seo'] = 'SEO';
  1. Переместите поля longtitle и description в секцию SEO

Скрытие ненужных полей

Для магазина одежды с опциями (цвет, размер отдельно):

  1. Откройте поле color
  2. Снимите "Видимость"
  3. Повторите для size

Изменение ширины полей

Сделать поле article на всю ширину:

  1. Откройте редактирование поля
  2. Установите ширину 100
  3. Сохраните

Два поля в ряд — установите каждому ширину 50.

Добавление кастомного поля

  1. Откройте Утилиты → Дополнительные поля
  2. Выберите модель msProductData
  3. Создайте поле:
    • Имя: warranty_months
    • Тип: INT
    • xtype: numberfield
  4. Сохраните (создастся колонка в БД)
  5. Откройте Утилиты → Поля товара
  6. Переместите поле в нужную секцию
  7. Настройте label и описание

Расширение через плагины

Событие msOnManagerCustomCssJs

Позволяет добавить свой CSS/JS на страницу товара:

php
<?php
// Плагин: MyProductExtension
// События: msOnManagerCustomCssJs

if ($modx->event->name !== 'msOnManagerCustomCssJs') return;

$page = $modx->event->params['page'] ?? '';

if ($page === 'product_update' || $page === 'product_create') {
    $modx->regClientCSS('/assets/components/mycomponent/css/product.css');
    $modx->regClientStartupScript('/assets/components/mycomponent/js/product.js');
}

Расширение Vue компонента

Через Plugin Registry можно добавить свои виджеты:

javascript
// assets/components/mycomponent/js/product.js

document.addEventListener('DOMContentLoaded', () => {
  if (window.MS3PluginRegistry) {
    // Регистрация кастомного xtype
    MS3PluginRegistry.registerWidget('my-custom-field', {
      component: MyCustomFieldComponent,
      props: ['field', 'modelValue']
    })
  }
})

Связанные страницы