Обзор менеджера
Раздел Компоненты → msBundles открывается из меню или по прямой ссылке manager/?a=index&namespace=msbundles. Интерфейс собран на Vue 3 и PrimeVue через VueTools.

Пошаговые сценарии со скриншотами: Сценарии.
Экран списка
Сверху вниз:
- Заголовок раздела.
- Панель: поиск по названию, фильтр активности, счётчик, кнопка Добавить комплект.
- Таблица: порядок, название с картинкой, статус, число товаров, действия.

| Действие | Как сделать |
|---|---|
| Открыть редактор | Клик по названию |
| Скопировать | Иконка копирования. Откроется неактивная копия |
| Удалить | Иконка корзины, затем подтверждение |
| Поменять порядок | Перетащите строку за ручку слева |
Поиск срабатывает с небольшой задержкой. Фильтр активности: все / активные / неактивные. Пустой список и «ничего не найдено» показывают отдельный экран с кнопкой создания.
Создание и правка
- Нажмите Добавить комплект или кликните по названию в списке.
- Заполните Название (обязательно). Описание и изображение через медиа-браузер MODX по желанию.
- Включите Активен, если комплект уже можно показывать на сайте. При
activeOnly=1на витрине видны только активные. - Добавьте товары поиском по названию, артикулу или ID. Один товар в комплект попадает один раз.
- Для каждой строки задайте количество, режим цены и флаг Обяз.
- Порядок товаров меняйте перетаскиванием в таблице состава.
- Нажмите Сохранить. Без товаров в составе кнопка недоступна.

Карточка комплекта появится на страницах всех товаров из состава.
Примеры режимов цены
Один комплект может смешивать разные режимы:

Фиксированная цена и необязательные позиции:

Скидка процентом или суммой:

Список режимов в селекте строки:

Правая колонка
| Блок | Что показывает |
|---|---|
| Сводка | Сколько позиций и единиц в составе |
| Как на витрине | Цена, экономия и остатки для одного комплекта. Пометка «Только превью» |

Те же итог и экономия продублированы в футере диалога. Если обязательной позиции не хватает на складе, над формой появится предупреждение. При сохранении в такой ситуации менеджер попросит подтверждение.
Режимы цены строки
| Режим | Поле значения | Результат |
|---|---|---|
| Оригинал | не используется | Цена товара из miniShop3 |
| Фикс | сумма | Фиксированная цена за единицу |
| Скидка % | 0–100 | Процент скидки от цены товара |
| Скидка суммой | сумма | Вычитается из цены товара |
| Бесплатно | не используется | 0 за единицу |
Итог комплекта = сумма строк × число комплектов. Экономия = разница с суммой по обычным ценам. Нулевая цена на витрине показывается как «Бесплатно».
Обязательные и необязательные товары
Обязательная позиция нужна для доступности комплекта. Если её нет на складе, срабатывает msbundles_stock_behavior.
Необязательную позицию при нехватке комплект пропускает при добавлении в корзину. В ответе API могут появиться warnings. Остальной набор всё равно добавится.
Права
| Операция | Право |
|---|---|
| Открыть раздел, список, просмотр | msbundles_view |
| Создание, правка, удаление, порядок, копирование | msbundles_save |
Как комплект ведёт себя в корзине
Плагин msBundles следит за корзиной miniShop3:
- при смене количества одной позиции остальные с тем же
bundle_hashподстраиваются - при удалении одной позиции уходит весь комплект
- при отдаче корзины добавляются данные для бейджа и подписей
Количество в строке должно быть кратно базовому количеству позиции из комплекта.
На витрине подключите msBundles.initialize и в чанке корзины вызовите tplMsBundlesCartInfo. У главной строки будут бейдж и «Удалить комплект», у остальных количество заблокировано. Чтобы блок на странице обновлялся после добавления, у msCart нужен selector. Подробности: Вывод на сайте.
