msBundles
С msBundles вы собираете наборы товаров в miniShop3 и продаёте их как одно предложение. Покупатель жмёт одну кнопку. В корзину попадают все позиции комплекта. Цена и скидка считаются по правилам, которые вы задали в менеджере. Если покупатель меняет количество или удаляет комплект, позиции набора меняются вместе.
С чего начать: Быстрый старт.

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

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