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',
]}

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

Ссылка на компонент
Поблагодарить автора
Отправить деньги
Комментарии: 4
Рад появлению такому компоненту. Вопрос. А можно ли выводить список подарков в любом другом месте вне корзины? И уведомить так же пользователя о том, что еще чуть-чуть и тебе подарочек, так же вне корзины?
Да, через сниппет msGiftCart можно вывести в любом месте, но его можно вызывать только один раз и если не вызван сниппет msCart. Это связано с тем, что минишоп использует id для работы с корзиной, но это тоже решается.
Можно ли с помощью данного дополнения решить такую задачу:
дать скидку -15% при заказе от 4х товаров разного наименования?
В описании есть:
дать скидку -15% при заказе от 4х товаров разного наименования?
В описании есть:
Для кастомных подарков можно указывать отрицательную цену, и тогда при добавлении такого подарка будет применена соответствующая скидка в корзине.Можно ли указывать цену в виде процента? Будет ли работать?
На данный момент % не работает. Добавил в список задач.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.