[UPDATE] Разные скидки в зависимости от общей суммы корзины
По следам записи Михаила Воеводского и этого объявления о работе был написан плагин для miniShop2, который позволяет выставить скидку в процентах для всей корзины в зависимости от общей суммы корзины.
Скидка выставляется пошагово: по достижении определённых сумм применяется своя скидка. К примеру, корзина стоит 100кр — скидка 10%, 150кр — 15%. При желании можно выставить сколько угодно шагов и какой угодно процент. Данные указываются массивом в самом начале плагина, вот так:
Скидка выставляется пошагово: по достижении определённых сумм применяется своя скидка. К примеру, корзина стоит 100кр — скидка 10%, 150кр — 15%. При желании можно выставить сколько угодно шагов и какой угодно процент. Данные указываются массивом в самом начале плагина, вот так:
$discounts = array(
'100000' => '10%',
'150000' => '15%',
'200000' => '20%',
);Часть кода была взята из компонента msPromoCode, в частности для того, чтобы цены на товары в корзине обновлялись динамически при смене кол-ва или удалении товара из корзины.Инструкция по установке
- Создаём плагин (код плагина) и вешаем на события:
- msOnAddToCart
- msOnChangeInCart
- msOnRemoveFromCart
- OnHandleRequest
- OnLoadWebDocument
- Создаём чанк tpl.msdfcMsg с таким содержимым:
[[+current.discount:ne=`0`:then=`<p>Текущая скидка <b>[[+current.discount]]</b> и <b>[[+discount_amount]] [[%ms2_frontend_currency]]</b></p>`]] [[+next.discount:ne=`0`:then=`<p>Если наберете на <b>[[+next.total_cost]] [[%ms2_frontend_currency]]</b>, то получите скидку <b>[[+next.discount]]</b>.</p>`]]
На странице корзины или где-либо в ином месте шаблона, где надо вывести надпись:
Текущая скидка 10% и 10 699.9 руб.
добавляем такой код:
Если наберете на 150 000 руб., то получите скидку 15%.
<div class="msdfc_msg"></div>
- Для динамического обновления цен на товары в корзине, при вызове сниппета msCart дублируем чанк из параметра &tplRow, например назовём его tpl.msCart.row.2:
[[!msCart? &tplRow=`tpl.msCart.row.2` ]]
В этом чанке указываем класс .price не тегу td, а на тег span, обрамляющий плейсхолдер [[+price]] и дополнительно оборачиваем его в span. На примере будет понятнее:
Было:
Стало:<td class="price"><span>[[+price]]</span> [[%ms2_frontend_currency]][[+old_price]]</td>
<td><span class="price"><span>[[+price]]</span></span> [[%ms2_frontend_currency]][[+old_price]]</td>
И в быстром плейсхолдере old_price в самом низу чанка оборачиваем [[+old_price]] в span:
Было:
Стало:<!--minishop2_old_price <span class="old_price">[[+old_price]] [[%ms2_frontend_currency]]</span>-->
<!--minishop2_old_price <span class="old_price" style="display: none;"><span>[[+old_price]]</span> [[%ms2_frontend_currency]]</span>-->
Внимание
Плагин может конфликтовать с другими дополнениями, работающими с ценами товаров в корзине или вывешанными на эти же события. Если происходит непонятное поведение плагина, попробуйте выставить приоритет 10 или выше на все события, на которых работает плагин.Комментарии: 29
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Вот скидки
Обновляется динамически
Добавил в инструкцию.
После того как стал получать размер скидки из tv типа migx, перестала выводиться информация о размере скидки в чанке.
Если будет время, подскажите, пожалуйста, в чем может быть проблема.
В плагин добавлена функция вывода надписи:
Текущая скидка 10% и 10 699.9 руб.
Если наберете на 150 000 руб., то получите скидку 15%.
Обновляется динамически
Вот у меня динамически обновляется только в корзине, а в tpl.msMiniCart на остальных страницах только после обновления страницы. Подскажите, как решить?
Решение типа:
не решает. Вообще всё зверски кешируется, непонятно кем…
Текущая скидка 5% и 815.3 руб.
При покупке на 50 000 руб., вы получите скидку 10%.
Ваша корзина пуста
Что-то с текущей версией minishop2 js не хочет запускаться. Может быть кто-то уже сталкивался с этим?
Гущин СергейГущин СергейТут два состояния:
И второе:
Если в первом как бы более-менее понятно (хотя не факт)
Там мы можем взять id товара и исключить его через if, но надо потом его стоимость надо приплюсовать к сумме со скидками,
Ну а во втором пока что темный лес
По идее правок в 3 первых событиях должно хватить.
Подскажите пожалуйста, как вместо процентов в данном примере добавить определенный товар?
Т.е. если общая сумма заказа больше 1000, то пользователь может выбрать один из 3-4х товаров как подарок к своему заказу. Это вообще сложно сделать?