К содержанию

Минимальная сумма заказа minishop2

Ребята, как сделать минимальную сумму заказа для выбранного способа доставки.
if ($modx->event->name == 'msOnSubmitOrder'){
        if($cart = $order->ms2->cart->status()) {
            if($cart['total_cost'] < 1000) {
                $modx->event->output('Сумма вашего заказа должна превышать 1000 руб!');
            } 
        }
}
Работает этот способ, но независимо от выбранного способа доставки.
Как сделать, например, чтобы если «самовывоз» то нет ограничения по минимальной сумме.
Андрей
Андрей
14 мая 2020, 12:35
modx.pro
3 801
Реклама

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

Антон Тарасов
Антон Тарасов Проверенный
14 мая 2020, 13:23
Вам нужно добавить также условие по ID способа доставки, который самовывывоз, чтобы выполнялось только для него. $delivery->get('id')
    Андрей
    Андрей Старожил
    14 мая 2020, 13:36
    <?php
    if ($modx->event->name == 'msOnSubmitOrder'){
            if($cart = $order->ms2->cart->status()) {
                if($cart['total_cost'] < 1000 && $delivery->get('id') == 1) {
                    $modx->event->output('Минимальная сумма заказа для выбранного способа доставки 10000 руб!');
                } 
            }
    }
    Не получается.
      Антон Тарасов
      Антон Тарасов Проверенный
      14 мая 2020, 13:42
      неверно.
      if($cart['total_cost'] < 1000 && (1 == $delivery->get('id'))) /*если ID самовывоза=1*/{..}
        Андрей
        Андрей Старожил
        14 мая 2020, 15:53
        Не работает (
    Sergey (Sentinel)
    Sergey (Sentinel) Проверенный
    14 мая 2020, 16:06
    <?php
    if ($modx->event->name == 'msOnSubmitOrder'){
            if($cart = $order->ms2->cart->status()) {
                if($cart['total_cost'] < 1000 || $delivery->get('id') == 'payment_1') {
                    $modx->event->output('Минимальная сумма заказа для выбранного способа доставки 10000 руб!');
                } 
            }
    }
    так попробуй
      Андрей
      Андрей Старожил
      14 мая 2020, 16:31
      <?php
      $cart_status = $order->ms2->cart->status();
      $order_status = $order->get();
      
      if ($modx->event->name == 'msOnSubmitOrder'){
          if ($cart_status['total_cost'] < 10000 && $order_status['delivery'] <> 1) {
              $modx->event->output('Минимальная сумма заказа для выбранного способа доставки 10000 рублей!');
          } 
      }
      Вот так получилось.
        Владимир
        Владимир Старожил
        29 мая 2020, 12:54
        Здравствуйте, Андрей!
        Подскажите ваш код выше его в сниппет или это плагин. Помогите разобраться, нужно тоже реализовать минимальную сумму при заказе на доставку.
          Андрей
          Андрей Старожил
          29 мая 2020, 13:29
          Плагин на событие
          msOnSubmitOrder
          Создаёшь новый плагин, вешаешь на указанное событие, в коде указываешь свою минимальную сумму и ID способа доставки для которого она действует. В моем примере ограничение минимальной суммы действует для всех доставок кроме самовывоза
          $order_status['delivery'] <> 1
          для конкретного способа доставки будет, например, —
          $order_status['delivery'] == 2
            Владимир
            Владимир Старожил
            29 мая 2020, 13:42
            Благодарю, Андрей! Все работает!!!
              Roman
              Roman Старожил
              07 декабря 2022, 11:38
              Попробовал не работает может и за обновления минишопа
                Андрей
                Андрей Старожил
                07 декабря 2022, 11:50
                Конечно уже много времени и несколько обновлений назад это было, но вряд-ли в каком-либо из обновлений изменились события или статусы.
                Пробуйте, должно работать.
        Иван Бочкарев
        Иван Бочкарев Администратор
        08 декабря 2020, 09:05
        Вариант, когда нужно предоставить возможность указать минимальную сумму для клиента в ClientConfig:

        <?php
        $cart_status = $order->ms2->cart->status();
        $order_status = $order->get();
        $min_price_order = $modx->getOption('min_price_order');
        
        if ($modx->event->name == 'msOnSubmitOrder'){
            if ($cart_status['total_cost'] < $min_price_order && $order_status['delivery'] == 2) {
                $modx->event->output('Минимальная сумма заказа для выбранного способа доставки ' . $min_price_order . ' рублей!');
            } 
        }
          Станислав
          Станислав Старожил
          28 декабря 2020, 13:39
          Вот еще один способ, только через коллбэки
          <script>
                  $(document).ready(function() {
                      miniShop2.Callbacks.add('Order.getcost.response.success', 'Order_submit_response_success', function(responce) {
                          var cost = responce.data['cost'],
                              min_price = {'ms2_order_min_price' | config};
                          if (cost < min_price) {
                              miniShop2.Callbacks.add('Order.submit.before', 'Order_submit_before', function() {
                                  miniShop2.Message.error('Недостаточная сумма заказа, заказ отправляется от ' + min_price + ' руб.!');
                                  $('#error_message').text('Недостаточная сумма заказа, заказ отправляется от ' + min_price + ' руб.!');
                                  return false;
                              });
                          }
                      });
                  });
              </script>
            Roman
            Roman Старожил
            07 декабря 2022, 11:36
            Подскажите как правильно подключить Ваш скрипт
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            14