msGiftCart. Управления подарками.

Всем, привет.

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




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

Как добавить подарок?



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


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


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


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

Шаг 3. Выбираем подарки


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


Примеры.


Навигация по примерам. Показываем подарки если:
  1. Сумма заказа >= 1 000 руб.
  2. В корзине минимум 4 разных товара на общую сумму минимум 3 000 руб.
  3. В корзине есть товар в кол-ве 5 шт.
  4. В корзине есть Товар 1 и Товар 2
  5. В корзине есть товар из определенной категории.
  6. В корзине есть товар от определенного производителя.
  7. В корзине нет Товара 1
  8. В корзине нет товаров с ценой ниже 500 руб.
  9. В корзине должно быть минимум 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',
]}

Этим сниппетом, можно вывести и подарки на почте.

Заказы


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


Ссылка на компонент
Aleksandr Huz
18 ноября 2021, 16:27
modx.pro
206
+13
Поблагодарить автора Отправить деньги

Комментарии: 2

des1gner
19 ноября 2021, 15:47
+1
Рад появлению такому компоненту. Вопрос. А можно ли выводить список подарков в любом другом месте вне корзины? И уведомить так же пользователя о том, что еще чуть-чуть и тебе подарочек, так же вне корзины?
    Aleksandr Huz
    19 ноября 2021, 16:38
    0
    Да, через сниппет msGiftCart можно вывести в любом месте, но его можно вызывать только один раз и если не вызван сниппет msCart. Это связано с тем, что минишоп использует id для работы с корзиной, но это тоже решается.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2