
msPriceTiers
Оптовые цены по количеству для MiniShop3 — пороги на товаре и категории, шаблоны, корзина, ms3Variants


Пошаговые сценарии для витрины MiniShop3.
| Тема | Раздел |
|---|---|
| Карточка товара | Шаблон msProduct |
| ms3Variants | Интеграция с ms3Variants |
| Корзина | Корзина |
| Каталог | Страница категории |
| Каскад цен | Наследование от категории |
{'!msPriceTiers.initialize' | snippet}
<article class="product" data-product-id="{$_modx->resource.id}">
<h1>{$_modx->resource.pagetitle}</h1>
<div class="product-price">
<span class="mspricetiers-cost">{$price} ₽</span>
{if $old_price > 0}
<span class="mspricetiers-old-cost">{$old_price} ₽</span>
{/if}
</div>
<form method="post" class="ms3_form mspricetiers-form">
<input type="hidden" name="id" value="{$_modx->resource.id}">
<input type="number" name="count" class="mspricetiers-quantity" value="1" min="1">
<button type="submit" name="ms3_action" value="cart/add">В корзину</button>
</form>
<section>
<h3>{'mspricetiers_price_tiers' | lexicon}</h3>
{'!msPriceTiers' | snippet : ['product' => $_modx->resource.id]}
</section>
{'!msPriceTiersProgress' | snippet : ['product' => $_modx->resource.id]}
</article>[[!msPriceTiers.initialize]]
<article class="product" data-product-id="[[*id]]">
<h1>[[*pagetitle]]</h1>
<div class="product-price">
<span class="mspricetiers-cost">[[+price]] ₽</span>
[[+old_price:notempty=`<span class="mspricetiers-old-cost">[[+old_price]] ₽</span>`]]
</div>
<form method="post" class="ms3_form mspricetiers-form">
<input type="hidden" name="id" value="[[*id]]">
<input type="number" name="count" class="mspricetiers-quantity" value="1" min="1">
<button type="submit" name="ms3_action" value="cart/add">В корзину</button>
</form>
<section>
<h3>[[%mspricetiers_price_tiers]]</h3>
[[!msPriceTiers? &product=`[[*id]]`]]
</section>
[[!msPriceTiersProgress? &product=`[[*id]]`]]
</article>При mspricetiers_integrate_ms3variants = Да:
ms3_product_variants.ms3variants:selected → пересчёт в mspricetiers.js.На странице должна быть стандартная разметка ms3Variants: форма .ms3variants-product-{id}, поле _variant_id в options при добавлении в корзину.
В AJAX price можно передать variant_id — см. AJAX API.
Цены в корзине обновляет плагин mspricetiers_events при mspricetiers_apply_in_cart = Да.
Прогресс по всей корзине:
{'!msPriceTiersProgress' | snippet : ['cart' => 1, 'tpl' => 'mspricetiers.progress_cart']}[[!msPriceTiersProgress?
&cart=`1`
&tpl=`mspricetiers.progress_cart`
]]В начале шаблона категории:
{'!msPriceTiers.initialize' | snippet}
{'!msProducts' | snippet : ['parents' => $_modx->resource.id, 'tpl' => 'tpl.Product.row']}[[!msPriceTiers.initialize]]
[[!msProducts?
&parents=`[[*id]]`
&tpl=`tpl.Product.row`
]]В чанке строки каталога — опционально компактная таблица или бейдж «Оптовые цены» (mspricetiers.badge).
{set $userGroups = $_pls['user_groups'] ?: []}
{if 2 in $userGroups}
{'!msPriceTiers' | snippet : ['product' => $_modx->resource.id]}
{else}
<p>Розничная цена: {$price} ₽</p>
{/if}[[!+user_groups:contains=`2`:then=`
[[!msPriceTiers? &product=`[[*id]]`]]
`:else=`
<p>Розничная цена: [[+price]] ₽</p>
`]]Группы в плейсхолдере зависят от настройки MODX / дополнений. При необходимости получите группы отдельным сниппетом.
| Действие | Ожидание |
|---|---|
| Товар, qty < первого порога | Базовая / цена варианта |
| qty ≥ порога | Цена порога, подсветка строки в таблице |
| Корзина, 10+ шт. | Позиция с tier-ценой |
| Смена варианта | Пересчёт без перезагрузки |