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
Рад появлению такому компоненту. Вопрос. А можно ли выводить список подарков в любом другом месте вне корзины? И уведомить так же пользователя о том, что еще чуть-чуть и тебе подарочек, так же вне корзины?
Да, через сниппет msGiftCart можно вывести в любом месте, но его можно вызывать только один раз и если не вызван сниппет msCart. Это связано с тем, что минишоп использует id для работы с корзиной, но это тоже решается.
Можно ли с помощью данного дополнения решить такую задачу:
дать скидку -15% при заказе от 4х товаров разного наименования?
В описании есть:
дать скидку -15% при заказе от 4х товаров разного наименования?
В описании есть:
Для кастомных подарков можно указывать отрицательную цену, и тогда при добавлении такого подарка будет применена соответствующая скидка в корзине.Можно ли указывать цену в виде процента? Будет ли работать?
На данный момент % не работает. Добавил в список задач.
Как минимум с последним минишоп (4.1.1-pl) не совместим. При добавлении товара в корзину ничего не происходит, корзина остается пустой. Виной всему «кастомный» обработчик корзины msGiftCartHandler. Если поменять его на стандартный, товары добавляются.
Вообще, мне кажется, категорически не правильно, когда компонент устанавливает свой «кастомынй» обработчик! А если я уже использую свой? А если каждый компонент будет добавлять свой? Так ничего работать не будет, только поломается всё…
Да, согласен. Это вряд ли правильно.
Лучше пользоваться плагинами.
Лучше пользоваться плагинами.
Добрый день, столкнулись с таким багом. Сделали промокод со скидкой на 3 т.р., который появляется при добавлении в корзину товаров на 10 т.р. Как я понимаю стандартное применение данного компонента.
В итоге пользователь может добавить товаров на 10 т.р., появится промокод, добавляет его в корзину, после чего уменьшить сумму покупок на ~7 т.р.
В итоге у пользователя товары в корзину на ~3 т.р. и промокод на ту же сумму. После можно без проблем оплатить 10-100 рублей и ждать свой заказ на 3 т.р.
Как-то можно пофиксить этот баг? Или мы просто некорректно установили компонент?
В итоге пользователь может добавить товаров на 10 т.р., появится промокод, добавляет его в корзину, после чего уменьшить сумму покупок на ~7 т.р.
В итоге у пользователя товары в корзину на ~3 т.р. и промокод на ту же сумму. После можно без проблем оплатить 10-100 рублей и ждать свой заказ на 3 т.р.
Как-то можно пофиксить этот баг? Или мы просто некорректно установили компонент?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.