Как сделать акцию 1+1=3 в корзине minishop2?

Как сделать акцию 1+1=3 в корзине minishop2?

Нужно, что бы когда покупатель добавил 3 товара (любых) в корзину, товар с наименьшей ценой становился автоматом 0$. Искал везде примеры, но там скидка в процентах на заказ.

Нужно проверить кол-во товаров в корзине, далее найти товар с наименьшей ценой и изменить ему цену на 0$ так что бы в заказе он был 0$ (или бесплатно)
Sergey
28 ноября 2021, 18:39
modx.pro
766
-1

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

Николай Савин
28 ноября 2021, 18:52
0
Перенес в вопросы
    Aleksandr Huz
    28 ноября 2021, 19:17
    0
    Использовать событие msOnAddToCart
      Артур Шевченко
      28 ноября 2021, 19:18
      0
      Я бы сделал так. Перед добавлением товара в корзину (msOnBeforeAddToCart) проверял бы сколько товаров уже есть в ней, если 3 и больше обнулял стоимость, соответственно при удалении товара из корзины (msOnRemoveFromCart) делал бы аналогичную проверку, но возвращал товару с нулевой стоимостью его первоначальную цену. На всё это нужно два плагина, но возможно, я не учёл какие-то нюансы.
        Aleksandr Huz
        28 ноября 2021, 20:33
        0
        На всё это нужно два плагина, но возможно, я не учёл какие-то нюансы.
        1. Можно использовать 1 плагин на 2 события.
        2. msOnBeforeAddToCart — не подойдет, цена устанавливается после этого события, и после него есть еще событие msOnGetProductPrice, где какой-то компонент может изменить цену товара.
          Sergey
          28 ноября 2021, 20:45
          0
          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 тут оригинал
            Артур Шевченко
            28 ноября 2021, 22:08
            0
            Можно использовать 1 плагин на 2 события.
            Вероятно я мы по-разному считаем количество плагинов))) А по поводу остального, это было моё предположение.
          Александр Мельник
          29 ноября 2021, 08:24
          0
          Мне кажется вам нужно и сами условия акции хорошо продумать. К примеру — человек покупает 3 товара и у самого дешевого ваш плагин поставит цену равную ноль. Но потом человек добавит в корзину еще 2 товара и у один из них еще более дешевый. Как быть — тому товару что обнулили возвращать изначальную стоимость, и теперь самому дешевому из пяти ставить нулевую? Плюс нужно позаботаться о том, что человек может и удалять товары из корзины, к примеру добавил три товара, один из них стал бесплатным, а потом удалил два с ценой и купил один товар за нулевую цену. Тоесть ваш плагин должен еще отрабатывать событие удаления товаров, изменения их количества и так далее.
            Sergey
            29 ноября 2021, 08:38
            0
            Все то что вы описали, верно. Нужно что бы плагин срабатывал всегда, при изменении кол-ва товаров, когда удалил 2 из 3-х товаров, у него возвращаеться цена, или если человек закинул 6 товаров в корзину, тогда два самых дешевых становятся с нулем)) Возможно кто то сможет написать плагин не за бесплатно)?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9