Можно ли из плагина вызвать уведомление? Новый

Дополнение: miniShop2

Добрый вечер, всем, кто нибудь подскажите —
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
if ($modx->event->name == 'msOnSubmitOrder'){
        if($cart = $order->ms2->cart->status()) {
            if($cart['total_cost'] < 1500) {
                $modx->event->output('Сумма вашего заказа должна превышать 1500 руб!');
            } 
        }
}
18 октября 2016, 17:54    Sem   G+  
4    573 0

Комментарии (8)

  1. Petr Golovatyy 18 октября 2016, 21:30 # 0
    Думаю лучше вешать на это событие
    msOnBeforeValidateOrderValue
    подробнее тут
    1. Роман Садоян 18 октября 2016, 21:58 # +1
      У меня вот так работает на одном из проектов
      $message = "Минимальная сумма для подачи заявки равна: ".$mincost;
            $data = array('success' => false, 'message' => $message);
            return $modx->event->output($message);
      1. Sem 19 октября 2016, 12:46 # 0
        В общем так и не получилось у меня реализовать всё только через плагин, пришлось использовать коллбеки miniShop2.
        Получилось у меня вот такое решение: (может кому пригодится)
        miniShop2.Callbacks.add('Cart.change.response.success', 'verify_min_cost', function (response) {
                var min_cost = $('#min_cost'), //элемент с сообщением
                    order_submit = $('#order_submit'); //Кнопка отправки заказа
        
                if(response.data.total_cost < 1500){
                    min_cost.text("Минимальная сумма заказа - 1500 руб.");//сообщение прям на странице
                    miniShop2.Message.error('Сумма заказа должна быть от 1500 руб.!');//сообщение во всплывашке
                    order_submit.prop('disabled', true);//просто деактивируем кнопку отправки заказа
                    
                    return false; // выходим из коллбека
                }
                min_cost.text("");//очищаем сообщение на странице
                order_submit.prop('disabled', false);//активируем кнопку отправки заказа
            });
        
        Ну а для шаловливых рук, которые могут подправить js на лету и попытаться отправить заказ я повесил свой плагин на событие msOnSubmitOrder
        Ещё раз код плагина
        if ($modx->event->name == 'msOnSubmitOrder'){
            if($cart = $order->ms2->cart->status()) {
                if($cart['total_cost'] < 1500) {
                    $modx->event->output('Сумма вашего заказа должна превышать 1500 руб!');
                } 
            }
        }
        
        Сообщение от него конечно не появляется, но заказ не будет отправлен, а так как страница перезагрузится, то и скрипты и статические проверки прямо в шаблоне страницы снова сработают и будут выведены сообщения о минимальной цене заказа.
        Маленькое уточнение — задача была на минимальную стоимость заказа без учёта доставки или ещё чего-то, только сумма товаров в корзине.
        1. Роман Садоян 19 октября 2016, 13:07 # +1
          Так ты делай как у меня в комменте через return и передай массив в output и будет счастье.
          1. Sem 19 октября 2016, 14:04 # 0
            Ром, вот не поверишь, но я уже пробовал твой вариант, кстати, у тебя там опечатка в комментарии
            return $modx->event->output($data);
            Я попробовал так — но ничего не выводится, страница просто перезагружается и тишина)
            Поэтому решил по-другому.
            Вообще конечно интересно, как это сообщение вообще должно появится если страница полностью перезагружается при нажатии на submit? Форма заказа не через ajax же отправляется.
            1. Роман Садоян 19 октября 2016, 16:22 # 0
              у тебя там опечатка в комментарии
              Код скопирован с рабочего сайта, какая опечатка?

              Я вечером, уточню событие на которое срабатывает плагин.
              1. Sem 19 октября 2016, 17:38 # 0
                Ты написал, что в output нужно передать массив, а в твоем комментарии передаётся строка — в этом опечатка.
                1. Роман Садоян 19 октября 2016, 21:15 # 0
                  Ага, понял, в общем вот такой код у меня работает:

                  switch ($modx->event->name) {
                  
                    case 'msOnSubmitOrder':
                      $orderData = $order->get();
                      $status = $order->ms2->cart->status();
                  // Здесь я получаю минимальную стоимость из системной настройки
                      $mincost = $modx->getOption('ms2_payment_rsb_mincost');
                      if(!$mincost){
                        $mincost = 3000;
                      }
                      if($status['total_cost'] < $mincost)
                      {
                        $message = "Минимальная сумма для подачи заявки равна: ".$mincost;
                        $data = array('success' => false, 'message' => $message);
                        return $modx->event->output($message);
                      }
                  }
                  
                  
                  Сейчас уже не вспомню зачем я записываю в $data такой массив.
                  Но minishop подхватывает это уведомление и выводит ошибку, при этом форма не отправляется.
        Вы должны авторизоваться, чтобы оставлять комментарии.