Настройка miniShop2 для интернет-магазина на MODX
miniShop2 — e-commerce компонент для MODX Revolution, разработанный командой Bezumkin. Органично встраивается в архитектуру MODX: товары — это ресурсы с дополнительными полями, корзина и заказы — собственные таблицы компонента. Результат — каталог, который управляется через привычный MODX-менеджер, а не через отдельную панель.
Установка через Package Manager
Extras → Package Management → Search: miniShop2 → Download → Install
miniShop2 устанавливает несколько компонентов:
-
miniShop2— основной компонент (товары, заказы, категории) -
pdoTools— оптимизированные сниппеты для вывода данных (обязательная зависимость) -
mSearch2— поиск и фильтрация (рекомендуется) -
msOptionsPrice2— опции с влиянием на цену (рекомендуется)
После установки в контекстном меню ресурса появляются типы: «Товар miniShop2» и «Категория miniShop2».
Структура каталога
MODX-ресурсы выстраиваются в дерево, miniShop2 это использует напрямую:
Каталог (msCategory)
├── Кресла (msCategory)
│ ├── Кресло офисное Черное (msProduct)
│ └── Кресло руководителя (msProduct)
└── Столы (msCategory)
└── Стол угловой (msProduct)
Создание категории:
Ресурсы → Создать ресурс → Тип: Категория miniShop2
→ Заголовок: Кресла
→ Псевдоним: kresla
→ Опубликован: Да
→ Вкладка miniShop2: настройки отображения товаров
Создание товара:
Внутри категории → Создать ресурс → Тип: Товар miniShop2
→ Заголовок, псевдоним, описание
→ Вкладка «Товар»:
Цена: 1499.00
Старая цена: 1999.00
Артикул: CHAIR-BLK
Вес: 12.5
Количество: 25
→ Галерея: загружаем изображения
→ Опции: Цвет, Размер
Вывод каталога через сниппеты
miniShop2 использует сниппеты pdoTools для вывода данных. Вывод списка товаров:
[[!msProducts?
&parents=`15`
&tpl=`tpl.msProduct.row`
&limit=`24`
&sortby=`{"price":"ASC"}`
&where=`{"msProduct.price:>":0}`
&includeTVs=`color,size`
]]
Шаблон tpl.msProduct.row — Chunk с плейсхолдерами:
<div class="product-card">
<a href="[[+uri]]">
<img src="[[+thumb]]" alt="[[+pagetitle]]">
</a>
<div class="product-title">[[+pagetitle]]</div>
<div class="product-price">
[[+old_price:notempty=`<span class="old-price">[[+old_price]] руб.</span>`]]
<strong>[[+price]] руб.</strong>
</div>
<button class="ms2_add_to_cart" data-id="[[+id]]">В корзину</button>
</div>
Параметр &parents — ID родительского ресурса-категории или список ID через запятую. &includeTVs — дополнительные TV-поля для включения в вывод.
Опции товара (msOptionsPrice2)
Опции — это атрибуты, которые влияют на цену, артикул и остаток:
Extras → msOptionsPrice2 → Опции → Создать
→ Название: Цвет
→ Тип: select
→ Значения:
Чёрный [key=BLK, mod=0]
Белый [key=WHT, mod=0]
Красный [key=RED, mod=150] ← надбавка 150 руб.
Привязка опций к товару — через вкладку «Опции» в редакторе товара. Для каждой комбинации опций можно задать отдельный артикул и количество.
JavaScript-обработчик смены опции (встроен в miniShop2):
// miniShop2 автоматически обновляет цену при смене опций
// через AJAX-запрос к процессору ms2/product/options/get
document.addEventListener('ms2_options_changed', function(e) {
const { price, old_price, count } = e.detail
document.querySelector('.product-price').textContent = price + ' руб.'
})
Корзина и оформление заказа
Корзина управляется через AJAX-вызовы к процессорам miniShop2:
// Добавление в корзину
fetch('/assets/components/minishop2/index.php', {
method: 'POST',
body: new URLSearchParams({
action: 'cart/add',
id: productId,
count: 1,
options: JSON.stringify({ color: 'BLK' })
})
})
.then(r => r.json())
.then(data => {
if (data.success) {
updateCartCounter(data.data.total_count)
}
})
Форма оформления заказа:
[[!msCart?
&tpl=`tpl.msCart`
]]
[[!msOrder?
&tpl=`tpl.msOrder`
&deliveries=`1,2,3`
&payments=`1,2`
]]
Сниппет msOrder выводит форму с выбором доставки и оплаты и обрабатывает оформление через JavaScript + AJAX.
Доставки и оплата
miniShop2 → Доставки → Создать
→ Название: Курьерская доставка
→ Стоимость: 300 руб.
→ Бесплатно от: 2000 руб.
→ Описание: Доставка по городу 1–2 рабочих дня
miniShop2 → Оплата → Создать
→ Название: Банковская карта
→ Класс: msPaymentRobokassa (нужен отдельный пакет)
→ Настройки: login, password1, password2, test mode
Для СДЭК, Boxberry, Почты России — устанавливаются дополнительные пакеты:
Package Management → Search: msCdek → Download → Install
→ miniShop2 → Доставки → СДЭК
→ Ввести API-ключ и город-отправитель
Статусы заказов
miniShop2 поставляется с базовыми статусами: Новый, Оплачен, Завершён, Отменён. Кастомные статусы:
miniShop2 → Статусы → Создать
→ Название: Передан в службу доставки
→ Цвет: #2196F3
→ Уведомление покупателю: Да (шаблон письма)
Смена статуса программно:
// В плагине или сниппете
$order = $modx->getObject('msOrder', $orderId);
$order->set('status', 4); // ID кастомного статуса
$order->save();
// Отправка уведомления (miniShop2 делает это автоматически через события)
$modx->invokeEvent('msOnChangeOrderStatus', [
'order' => $order,
'status' => 4,
]);
Фильтрация и поиск (mSearch2)
mSearch2 обеспечивает фасетный поиск по каталогу:
[[!mFilter2?
&filters=`price||ms|numrange,color||ms|select,size||ms|select`
&tpl=`tpl.Filter`
&parents=`15`
&element=`msProducts`
&sortby=`{"price":"ASC"}`
]]
Фильтрация работает через AJAX — при изменении фильтра список товаров обновляется без перезагрузки страницы.
Для оптимизации фасетов — поле ms2_properties в таблице modx_ms2_products индексируется:
ALTER TABLE modx_ms2_products ADD INDEX idx_price (price);
ALTER TABLE modx_ms2_products ADD INDEX idx_count (count);
Импорт товаров
miniShop2 не включает импортер из коробки. Используются дополнительные компоненты:
Package Management → Search: Commerce2 (или msImportExporter)
Для больших каталогов (тысячи товаров) — скрипт прямой загрузки через API MODX:
// Пакетный импорт из CSV
$rows = array_map('str_getcsv', file($csvPath));
foreach ($rows as $row) {
$resource = $modx->newObject('msProduct');
$resource->fromArray([
'pagetitle' => $row[0],
'alias' => $modx->filterPathSegment($row[0]),
'parent' => $categoryId,
'published' => 1,
'class_key' => 'msProduct',
]);
$resource->save();
$product = $modx->getObject('msProductData', $resource->id);
$product->fromArray([
'price' => (float) $row[2],
'vendor' => $row[3],
'count' => (int) $row[4],
'article' => $row[5],
]);
$product->save();
}
SEO-настройка
miniShop2 товары — это ресурсы MODX, поэтому SEO работает стандартными средствами:
- Meta Title =
longtitleилиpagetitleресурса - Meta Description = TV-поле
descriptionили встроенное описание
Для автогенерации метатегов — плагин seoSuite или pdoPage с кастомными шаблонами.
ЧПУ для каталога настраивается через System Settings:
System Settings → friendly_url: Yes
System Settings → friendly_alias_path: Yes
→ Ресурс каталога → псевдоним: catalog
→ Категория: catalog/kresla
→ Товар: catalog/kresla/kreslo-ofisnoe
Сроки реализации
- Установка компонентов + базовая настройка: 1 день
- Шаблоны каталога, карточки товара, корзины: 3–5 дней
- Настройка доставки + оплата: 1–2 дня
- Импорт товаров из Excel/CSV: 1–2 дня
- mSearch2 с фасетной фильтрацией: 2–3 дня
- SEO + микроразметка schema.org: 1 день
Итого типовой магазин на miniShop2: 1,5–2 недели.







