
msOrderTotal
Сниппет для получения итоговой информации о текущей корзине и заказе. Используется для мини-корзины в шапке сайта.
Кэширование
Сниппет работает с сессией пользователя и должен вызываться некэшированно (!msOrderTotal).
Параметры
| Параметр | По умолчанию | Описание |
|---|---|---|
| tpl | tpl.msOrderTotal | Чанк оформления |
| return | tpl | Формат: data (массив), tpl (рендеринг чанка) |
Чанк по умолчанию
Чанк tpl.msOrderTotal не поставляется с компонентом. Для вывода через чанк создайте его самостоятельно или используйте return=data.
Примеры
Получение данных
fenom
{set $total = '!msOrderTotal' | snippet : ['return' => 'data']}
{if $total.total_count > 0}
В корзине: {$total.total_count} товаров на {$total.cart_cost} руб.
{/if}Мини-корзина в шапке
fenom
{set $cart = '!msOrderTotal' | snippet : ['return' => 'data']}
<a href="/cart/" class="header-cart">
<span class="cart-icon">🛒</span>
<span class="cart-count" data-ms-cart-count>{$cart.total_count}</span>
<span class="cart-total" data-ms-cart-total>{$cart.cart_cost}</span> руб.
</a>С использованием чанка
fenom
{'!msOrderTotal' | snippet : [
'tpl' => 'tpl.myMiniCart'
]}Структура данных
Сниппет возвращает массив с итогами корзины и заказа:
| Поле | Описание |
|---|---|
cost | Итого к оплате (товары + доставка + комиссия оплаты) |
cart_cost | Стоимость товаров |
delivery_cost | Стоимость доставки |
payment_cost | Комиссия за способ оплаты |
total_count | Общее количество товаров |
total_cost | Стоимость товаров (дубль cart_cost) |
total_weight | Общий вес |
total_discount | Сумма скидки |
total_positions | Количество позиций (уникальных товаров) |
php
[
'cost' => 8100, // Итого к оплате
'cart_cost' => 7500, // Стоимость товаров
'delivery_cost' => 300, // Стоимость доставки
'payment_cost' => 300, // Комиссия оплаты (например, 4%)
'total_count' => 5, // Общее количество товаров
'total_cost' => 7500, // Стоимость товаров
'total_weight' => 2500, // Общий вес (граммы)
'total_discount' => 500, // Сумма скидки
'total_positions' => 3, // Количество позиций
]Разница между cost и cart_cost
cart_cost— стоимость только товаров в корзинеcost— итоговая сумма к оплате: товары + доставка + комиссия оплаты
Плейсхолдеры в чанке
При использовании return=tpl в чанк передаются все поля как плейсхолдеры:
fenom
{* tpl.myMiniCart *}
<div class="mini-cart" data-ms-minicart>
{if $total_count > 0}
<a href="/cart/" class="mini-cart-link">
<span class="mini-cart-count">{$total_count}</span>
<span class="mini-cart-cost">{$cart_cost}</span> руб.
</a>
{else}
<span class="mini-cart-empty">Корзина пуста</span>
{/if}
</div>Автообновление
Для автоматического обновления мини-корзины при изменениях используйте data-атрибуты:
html
<span data-ms-cart-count>0</span>
<span data-ms-cart-cost>0</span>
<span data-ms-cart-total>0</span>JavaScript MiniShop3 автоматически обновит эти элементы при:
- Добавлении товара в корзину
- Изменении количества
- Удалении товара
- Очистке корзины
Полный пример мини-корзины
fenom
{set $cart = '!msOrderTotal' | snippet : ['return' => 'data']}
<div class="mini-cart" data-ms-minicart>
<a href="/cart/" class="mini-cart-link d-flex align-items-center gap-2">
<svg width="24" height="24" fill="currentColor">
<use xlink:href="#icon-cart"/>
</svg>
<span class="mini-cart-info">
{if $cart.total_count > 0}
<span class="mini-cart-count" data-ms-cart-count>{$cart.total_count}</span> шт.
<span class="mini-cart-cost" data-ms-cart-cost>{$cart.cart_cost}</span> ₽
{else}
<span class="text-muted">Корзина пуста</span>
{/if}
</span>
</a>
</div>Отличие от msCart
| msOrderTotal | msCart |
|---|---|
| Только итоговые данные | Полная корзина с товарами |
| Лёгкий, быстрый | Загружает данные всех товаров |
| Для мини-корзины в шапке | Для страницы корзины |
| Минимум данных | Все поля товаров, опции, превью |
