Как сделать акцию 1+1=3 в корзине minishop2?
Как сделать акцию 1+1=3 в корзине minishop2?
Нужно, что бы когда покупатель добавил 3 товара (любых) в корзину, товар с наименьшей ценой становился автоматом 0$. Искал везде примеры, но там скидка в процентах на заказ.
Нужно проверить кол-во товаров в корзине, далее найти товар с наименьшей ценой и изменить ему цену на 0$ так что бы в заказе он был 0$ (или бесплатно)
Нужно, что бы когда покупатель добавил 3 товара (любых) в корзину, товар с наименьшей ценой становился автоматом 0$. Искал везде примеры, но там скидка в процентах на заказ.
Нужно проверить кол-во товаров в корзине, далее найти товар с наименьшей ценой и изменить ему цену на 0$ так что бы в заказе он был 0$ (или бесплатно)
Комментарии: 9
Перенес в вопросы
Использовать событие msOnAddToCart
Я бы сделал так. Перед добавлением товара в корзину (msOnBeforeAddToCart) проверял бы сколько товаров уже есть в ней, если 3 и больше обнулял стоимость, соответственно при удалении товара из корзины (msOnRemoveFromCart) делал бы аналогичную проверку, но возвращал товару с нулевой стоимостью его первоначальную цену. На всё это нужно два плагина, но возможно, я не учёл какие-то нюансы.
На всё это нужно два плагина, но возможно, я не учёл какие-то нюансы.1. Можно использовать 1 плагин на 2 события.
2. msOnBeforeAddToCart — не подойдет, цена устанавливается после этого события, и после него есть еще событие msOnGetProductPrice, где какой-то компонент может изменить цену товара.
switch ($modx->event->name) {
case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
$tmp = $cart->get(); //Получаем информацию о козине - т.е. список товаров
//$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($tmp, true));
foreach ($tmp as $key1 => $value) {
if ($product = $modx->getObject('msProduct', $value['id'])) {
$quantity = $value['count']; // получаем кол-во товара в корзине
if ($quantity > 2) {
$tmp[$key1]['price'] = $product->get(0);
}
else {
$realPrice = $product->get('price');
$tmp[$key1]['price'] = $realPrice; // Устанавливаем новую цену для товара в корзине
}
}
}
//$modx->log(xPDO::LOG_LEVEL_ERROR, $realPrice);
$cart->set($tmp);
break;
}
Нашел как бы пример, если кол-во больше 2 то ставит цену 0, но ставит всем товарам, а как найти товар с наименьшей ценой и ему поставить не знаю, не особо разбираюсь в написании ((( if ($quantity > 2) {
$tmp[$key1]['price'] = $product->get(0);
}
else {
$realPrice = $product->get('price');
$tmp[$key1]['price'] = $realPrice; // Устанавливаем новую цену для товара в корзине
}
}
}
https://modx.pro/help/18846 тут оригинал Можно использовать 1 плагин на 2 события.Вероятно я мы по-разному считаем количество плагинов))) А по поводу остального, это было моё предположение.
Мне кажется вам нужно и сами условия акции хорошо продумать. К примеру — человек покупает 3 товара и у самого дешевого ваш плагин поставит цену равную ноль. Но потом человек добавит в корзину еще 2 товара и у один из них еще более дешевый. Как быть — тому товару что обнулили возвращать изначальную стоимость, и теперь самому дешевому из пяти ставить нулевую? Плюс нужно позаботаться о том, что человек может и удалять товары из корзины, к примеру добавил три товара, один из них стал бесплатным, а потом удалил два с ценой и купил один товар за нулевую цену. Тоесть ваш плагин должен еще отрабатывать событие удаления товаров, изменения их количества и так далее.
Все то что вы описали, верно. Нужно что бы плагин срабатывал всегда, при изменении кол-ва товаров, когда удалил 2 из 3-х товаров, у него возвращаеться цена, или если человек закинул 6 товаров в корзину, тогда два самых дешевых становятся с нулем)) Возможно кто то сможет написать плагин не за бесплатно)?
t.me/ru_modx_work напиши сюда.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.