
msBundles
Product bundles for miniShop3 with shared pricing, discounts, and cart sync
- MODX 3
- PHP 8.2
- miniShop3
- Vue 3


Готовый шаблон для вывода всех комплектов на отдельной странице.
bundles с alias = bundles).msBundles.initialize подключён.{extends 'file:templates/base.tpl'}
{block 'content'}
<h1>Наборы товаров</h1>
{'!msBundles' | snippet : [
'list' => 'all',
'wrapperTpl' => 'tplMsBundlesList',
'tpl' => 'tplMsBundlesItem',
'limit' => 20,
'pageLimit' => 5
]}
{'!msBundles.initialize' | snippet}
{/block}<h1>Наборы товаров</h1>
[[!msBundles?
&list=`all`
&wrapperTpl=`tplMsBundlesList`
&tpl=`tplMsBundlesItem`
&limit=`20`
&pageLimit=`5`
]]
[[!msBundles.initialize]]| Параметр | Значение | Описание |
|---|---|---|
list | all | Вывести все комплекты контекста |
wrapperTpl | tplMsBundlesList | Обёртка списка (по умолчанию выводит <div> с классом msbundles-list) |
tpl | tplMsBundlesItem | Шаблон карточки комплекта |
limit | 20 | Количество на странице |
pageLimit | 5 | Страниц для пагинации |
Если нужно вывести комплекты только из определённых категорий:
{'!msBundles' | snippet : [
'list' => 'all',
'category' => '1,5,12'
]}Компонент использует стандартную пагинацию pdoTools. Для кастомизации:
{'!msBundles' | snippet : [
'list' => 'all',
'pageTpl' => 'tpl.Page',
'pageActiveTpl' => 'tpl.PageActive',
'pagePrevTpl' => 'tpl.PagePrev',
'pageNextTpl' => 'tpl.PageNext'
]}Для промо-страницы с фиксированными комплектами:
{extends 'file:templates/base.tpl'}
{block 'content'}
<section class="hero">
<h1>Готовые наборы</h1>
<p>Сэкономьте до 30% при покупке комплектом</p>
</section>
<section class="bundles-grid">
{'!msBundles' | snippet : [
'bundles' => '5,8,12,15',
'tpl' => 'tplMsBundlesPromo'
]}
</section>
{'!msBundles.initialize' | snippet}
{/block}Базовые стили применяются автоматически через msbundles.css. Для кастомизации сетки:
.msbundles-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--msbundles-space-6);
}
@media (max-width: 768px) {
.msbundles-list {
grid-template-columns: 1fr;
}
}