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

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

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

PG
PG
18 октября 2016, 21:30
0
Думаю лучше вешать на это событие
msOnBeforeValidateOrderValue
подробнее тут
    Роман Садоян
    18 октября 2016, 21:58
    +1
    У меня вот так работает на одном из проектов
    $message = "Минимальная сумма для подачи заявки равна: ".$mincost;
          $data = array('success' => false, 'message' => $message);
          return $modx->event->output($message);
      Семён Кудрявцев
      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 руб!');
              } 
          }
      }
      Сообщение от него конечно не появляется, но заказ не будет отправлен, а так как страница перезагрузится, то и скрипты и статические проверки прямо в шаблоне страницы снова сработают и будут выведены сообщения о минимальной цене заказа.
      Маленькое уточнение — задача была на минимальную стоимость заказа без учёта доставки или ещё чего-то, только сумма товаров в корзине.
        Роман Садоян
        19 октября 2016, 13:07
        +1
        Так ты делай как у меня в комменте через return и передай массив в output и будет счастье.
          Семён Кудрявцев
          19 октября 2016, 14:04
          0
          Ром, вот не поверишь, но я уже пробовал твой вариант, кстати, у тебя там опечатка в комментарии
          return $modx->event->output($data);
          Я попробовал так — но ничего не выводится, страница просто перезагружается и тишина)
          Поэтому решил по-другому.
          Вообще конечно интересно, как это сообщение вообще должно появится если страница полностью перезагружается при нажатии на submit? Форма заказа не через ajax же отправляется.
            Роман Садоян
            19 октября 2016, 16:22
            0
            у тебя там опечатка в комментарии
            Код скопирован с рабочего сайта, какая опечатка?

            Я вечером, уточню событие на которое срабатывает плагин.
              Семён Кудрявцев
              19 октября 2016, 17:38
              0
              Ты написал, что в output нужно передать массив, а в твоем комментарии передаётся строка — в этом опечатка.
                Роман Садоян
                19 октября 2016, 21:15
                4
                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 подхватывает это уведомление и выводит ошибку, при этом форма не отправляется.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8