msGiftCart. Управления подарками.
Всем, привет.
Компонент позволяет добавлять в корзину подарки. Подарками могут быть как обычные товары так и кастомные объекты. Подробности под катом.

Начну с технической части, но будет мало букв и картинки, поэтому рекомендую ознакомиться, потом легче будет понять примеры.
Шаг 1. Создаем правило.
Здесь все просто. Указываем название и дату, когда данное правило будет действительно на сайте.

Шаг 2. Добавляем условие для корзины.

Общие условия:

Группа пользователей. Позволяет дарить подарки только определенной группе пользователей или всем.
Шаг 3. Выбираем подарки

Подарки могут быть 2 типов — товар и кастомный подарок.
Кастомный подарок создается на отдельной вкладке. Помимо основных полей можно добавить абсолютно любые поля со своими значениями.

Навигация по примерам. Показываем подарки если:
Для кастомных подарков можно указывать отрицательную цену, и тогда при добавлении такого подарка будет применена соответствующая скидка в корзине.

Для вывода подарков используем сниппет msGiftCart вместо сниппета msCart. Принимает все параметры, что и сниппет msCart и еще один свой:
tplOuter:
В чанке доступны переменные:
Примеры:


Условие по общему количеству товаров:
Условие по количеству уникальных товаров:
Используем сниппет msGetOrderGifts

Этим сниппетом, можно вывести и подарки на почте.
В заказе подарки отображаются в отдельной вкладке. Соответсвенно, можно добавить подарки к заказу уже после оформления заказа.

Ссылка на компонент
Компонент позволяет добавлять в корзину подарки. Подарками могут быть как обычные товары так и кастомные объекты. Подробности под катом.

Начну с технической части, но будет мало букв и картинки, поэтому рекомендую ознакомиться, потом легче будет понять примеры.
Как добавить подарок?
Шаг 1. Создаем правило.
Здесь все просто. Указываем название и дату, когда данное правило будет действительно на сайте.

Шаг 2. Добавляем условие для корзины.

Общие условия:
- Цена корзины. Например, показываем подарки при заказе на сумму 1000 руб. и более.
- Кол-во товаров. Учитывается общее кол-во всех товаров.
- Кол-во разных товаров. Учитывается кол-во уникальных товаров.

Группа пользователей. Позволяет дарить подарки только определенной группе пользователей или всем.
- Модель. Доступно: товар магазина, категория товаров, производитель и опции товара.
- Товар магазина. Это поле динамическое и зависит от выбранной модели.
- Кол-во. Минимальное кол-во совпадений по условию, для товара — это его кол-во. В примерах более подробно разберем это поле.
- Поле объекта Зависит от выбранной модели.
- Условие. Равно, не равно и т.д
- Значение. С чем будем сравнивать.
- Применить ко всем товарам. По умолчанию условие проверяется столько, сколько указано в поле Кол-во, а если поставить галочку, то условие будет проверять каждый товар в корзине.
Шаг 3. Выбираем подарки

Подарки могут быть 2 типов — товар и кастомный подарок.
Кастомный подарок создается на отдельной вкладке. Помимо основных полей можно добавить абсолютно любые поля со своими значениями.

Примеры.
Навигация по примерам. Показываем подарки если:
- Сумма заказа >= 1 000 руб.
- В корзине минимум 4 разных товара на общую сумму минимум 3 000 руб.
- В корзине есть товар в кол-ве 5 шт.
- В корзине есть Товар 1 и Товар 2
- В корзине есть товар из определенной категории.
- В корзине есть товар от определенного производителя.
- В корзине нет Товара 1
- В корзине нет товаров с ценой ниже 500 руб.
- В корзине должно быть минимум 2 товара со старой ценой. (old_price > 0)
| № | Back-end | Front-end |
|---|---|---|
| 1 | ![]() | ![]() |
| 2 | ![]() | ![]() |
| 3 | ![]() | ![]() |
| 4 | ![]() | ![]() |
| 5 | ![]() | ![]() |
| 6 | ![]() | ![]() |
| 7 | ![]() | ![]() |
| 8 | ![]() | ![]() |
| 9 | ![]() | ![]() |
Подарок-скидка
Для кастомных подарков можно указывать отрицательную цену, и тогда при добавлении такого подарка будет применена соответствующая скидка в корзине.

Выводим подарки в корзине
Для вывода подарков используем сниппет msGiftCart вместо сниппета msCart. Принимает все параметры, что и сниппет msCart и еще один свой:
tplOuter:
@INLINE <div id="msGiftCart">{$wrapper}</div>В чанке доступны переменные:
- total — массив итоговых значений корзины, в котором:
- count — количество товаров
- gift — количество подарков
- weight — общий вес товаров
- cost — стоимость товаров
- discount — общая скида
- positions — кол-во уникальных товаров
- products — массив товаров корзины
- rule — массив правила
- gifts — массив доступных подарков
Переменная rule
C ее помощью показываем сообщения, что покупатель может получить подарок при выполнении определенных условий, для большей мотивации.Примеры:
{if $total['cost'] < $rule['total_cost_min']}
<div class="alert alert-info" role="alert">
При заказе выше {$rule['total_cost_min']} руб. Вы получите подарок. Вам осталось скупиться на {$rule['total_cost_min'] - $total['cost']} руб.
</div>
{/if}
{if $rule['gifts']}
<p>Подарки, которые вы можете забрать:</p>
<ul class="list-group">
{foreach $rule['gifts'] as $gift}
<li class="list-group-item">{$gift.pagetitle}</li>
{/foreach}
</ul>
{/if}
Условие по общему количеству товаров:
{if $total['count'] < $rule['total_count']}
<div class="alert alert-info" role="alert">
Вы можете получить подарок только, если закажите {$rule['total_count']} товаров. Осталось: {$rule['total_count'] - $total['count']}
</div>
{/if}Условие по количеству уникальных товаров:
{if $total['positions'] < $rule['total_positions']}
<div class="alert alert-info" role="alert">
Вы можете получить подарок только, если закажите {$rule['total_positions']} разных товаров. Осталось: {$rule['total_positions'] - $total['positions']}
</div>
{/if}Переменная gifts
Массив все подарков. Для оформления можно использовать стандартный чанк минишопа tpl.msProducts.row, но обязательно добавить в форму поле:<input type="hidden" name="options[gift_type]" value="{$gift_type}">Например:<div class="row">
{foreach $gifts as $gift}
{$_modx->getChunk('tpl.msProducts.row', $gift)}
{/foreach}
</div>Выводим подарки в заказе
Используем сниппет msGetOrderGifts
{'!msGetOrderGifts' | snippet: [
'order_id' => $order.id
'tpl' => '@FILE chunks/ms2/orders/product.tpl',
]}
Этим сниппетом, можно вывести и подарки на почте.
Заказы
В заказе подарки отображаются в отдельной вкладке. Соответсвенно, можно добавить подарки к заказу уже после оформления заказа.

Ссылка на компонент
Комментарии: 8
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.


















дать скидку -15% при заказе от 4х товаров разного наименования?
В описании есть:
Можно ли указывать цену в виде процента? Будет ли работать?
Лучше пользоваться плагинами.
В итоге пользователь может добавить товаров на 10 т.р., появится промокод, добавляет его в корзину, после чего уменьшить сумму покупок на ~7 т.р.
В итоге у пользователя товары в корзину на ~3 т.р. и промокод на ту же сумму. После можно без проблем оплатить 10-100 рублей и ждать свой заказ на 3 т.р.
Как-то можно пофиксить этот баг? Или мы просто некорректно установили компонент?