Налаштування miniShop2 для інтернет-магазину на MODX
miniShop2 — компонент електронної комерції для 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
→ Заголовок: Крісла
→ Псевдонім: krisla
→ Опубліковано: Так
→ Вкладка 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
Для кур'єрських служб, служб посилок, Укрпошти — встановлюються додаткові пакети:
Package Management → Search: msCdek → Download → Install
→ miniShop2 → Доставки → CDEK
→ Вводимо 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/krisla
→ Товар: catalog/krisla/krislo-ofisne
Терміни реалізації
- Встановлення компонентів + базова налаштування: 1 день
- Шаблони каталогу, карточки товару, кошик: 3–5 днів
- Налаштування доставки + оплата: 1–2 дні
- Імпорт товарів з Excel/CSV: 1–2 дні
- mSearch2 з фасетною фільтрацією: 2–3 дні
- SEO + мікророзмітка schema.org: 1 день
Разом типовий магазин на miniShop2: 1,5–2 тижні.







