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
1 278
+13
Поблагодарить автора Отправить деньги

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

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

    В описании есть:
    Для кастомных подарков можно указывать отрицательную цену, и тогда при добавлении такого подарка будет применена соответствующая скидка в корзине.
    Можно ли указывать цену в виде процента? Будет ли работать?
      Aleksandr Huz
      11 декабря 2021, 15:11
      +1
      На данный момент % не работает. Добавил в список задач.
      Максим
      06 февраля 2023, 17:09
      0
      Как минимум с последним минишоп (4.1.1-pl) не совместим. При добавлении товара в корзину ничего не происходит, корзина остается пустой. Виной всему «кастомный» обработчик корзины msGiftCartHandler. Если поменять его на стандартный, товары добавляются.
        Максим
        06 февраля 2023, 17:24
        0
        Вообще, мне кажется, категорически не правильно, когда компонент устанавливает свой «кастомынй» обработчик! А если я уже использую свой? А если каждый компонент будет добавлять свой? Так ничего работать не будет, только поломается всё…
          Николай Савин
          06 февраля 2023, 18:59
          0
          Да, согласен. Это вряд ли правильно.
          Лучше пользоваться плагинами.
        Панда
        01 сентября 2023, 11:15
        0
        Добрый день, столкнулись с таким багом. Сделали промокод со скидкой на 3 т.р., который появляется при добавлении в корзину товаров на 10 т.р. Как я понимаю стандартное применение данного компонента.

        В итоге пользователь может добавить товаров на 10 т.р., появится промокод, добавляет его в корзину, после чего уменьшить сумму покупок на ~7 т.р.

        В итоге у пользователя товары в корзину на ~3 т.р. и промокод на ту же сумму. После можно без проблем оплатить 10-100 рублей и ждать свой заказ на 3 т.р.

        Как-то можно пофиксить этот баг? Или мы просто некорректно установили компонент?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8