[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 или выше на все события, на которых работает плагин.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
Комментарии: 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х товаров как подарок к своему заказу. Это вообще сложно сделать?