
- MODX 3
- PHP 8.2
- miniShop3
- Vue 3


Продавайте наборы товаров miniShop3 как одно предложение. Покупатель добавляет комплект одной кнопкой — в корзину попадают все позиции. Цена и скидка считаются автоматически.

Раздел Компоненты → msBundles (Vue 3 + PrimeVue через VueTools). Поиск, фильтрация по активности и контексту, сортировка перетаскиванием.
В редакторе: контекст витрины, название, описание, изображение, состав. Поиск товаров ограничен контекстом. Контекст активного комплекта изменить нельзя — сначала выключите Активен и сохраните.
Копирование, превью «Как на витрине», проверка остатков. Права: msbundles_view, msbundles_save.
Экраны и сценарии: Интерфейс, Сценарии.
Режимы цены для строки:
| Режим | Описание |
|---|---|
| Оригинал | Цена товара из miniShop3 |
| Фикс | Фиксированная цена за единицу |
| Скидка % | Процент от цены товара |
| Скидка суммой | Сумма вычитается из цены |
| Бесплатно | 0 за единицу |
Позиции: обязательные и необязательные. В футере — итог и экономия. Карточка появляется на страницах всех товаров состава в том же контексте. Для других языков создайте отдельный комплект (Duplicate → смена контекста и состава).
Поведение при нехватке обязательной позиции задаёт msbundles_stock_behavior:
| Значение | Поведение |
|---|---|
block | Карточка есть, кнопка неактивна |
message | Карточка есть, выводится stock_message |
hide | Карточка не выводится |
Необязательную позицию при нулевом остатке комплект пропускает. Лимит: msbundles_max_bundle_quantity. Подробнее: Системные настройки.
На карточке товара вызовите msBundles. В каталоге: bundles (ID через запятую) или list=all. Сниппет, REST и корзина отдают только комплекты текущего контекста.
В <head>: msBundles.initialize. Цена пересчитывается при смене количества.
Важны data-атрибуты (data-msbundles, data-ms-bundle, data-msbundles-action), не CSS-классы. Темизация через --msbundles-*.
Код и плейсхолдеры: Вывод на сайте, Сниппеты.

Комплект в корзине — несколько строк miniShop3 с общим bundle_hash.
Главная строка: бейдж «Комплект», количество, кнопка «Удалить комплект». Остальные: подпись «Входит в комплект…», количество заблокировано. Изменение количества у главной строки меняет остальные. Удаление любой строки убирает весь комплект.
Для обновления корзины у msCart укажите selector. В чанке: tplMsBundlesCartInfo.
REST-маршруты calculate, add, remove, get через роутер miniShop3. События msOnBundle* для кастомизации. Примеры: REST API, События.
| Компонент | Назначение |
|---|---|
| MODX Revolution 3 | Ядро |
| miniShop3 | Корзина и API |
| VueTools | Интерфейс |
| pdoTools | Fenom-чанки |
| PHP 8.2+ | Сервер |
После установки назначьте права msbundles_view и msbundles_save.
| Задача | Страница |
|---|---|
| Установка и первый комплект | Быстрый старт |
| Настройка остатков и лимитов | Системные настройки |
| Вывод на сайте | Вывод на сайте |
| Страница каталога | Каталог комплектов |
| Параметры msBundles | msBundles |
| Подключение CSS/JS | msBundles.initialize |
| Интерфейс менеджера | Интерфейс |
| Сценарии работы | Сценарии |
| События и плагины | События |
| REST API | REST API |
| Частые ошибки | FAQ |