[miniShop2] Как проверить стоимость доставки при оформлении заказа?

Добрый день.
Возникла необходимость ввести дополнительную проверку не равна ли стоимость доставки нулю при оформлении заказа. Необходимо делать это до создания заказа и поэтому по идее нужно использовать плагин на системное событие msOnBeforeCreateOrder, но похоже, что в него не поступают данные о стоимости доставки или я просто не понимаю как их получить. Подскажите пожалуйста.
И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?
Спасибо за помощь
Giant Dad
25 декабря 2023, 14:31
modx.pro
212
0

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

Наумов Алексей
25 декабря 2023, 16:59
0
плагин на системное событие msOnBeforeCreateOrder, но похоже, что в него не поступают данные о стоимости доставки
Похоже, что должны поступать, судя по коду из msorderhandler.class.php:

// Раз
$delivery_cost = $this->getCost(false, true);
$cart_cost = $this->getCost(true, true) - $delivery_cost;
$num = $this->getNewOrderNum();

/** @var msOrder $msOrder */
// Два
$msOrder = $this->storageHandler->getForSubmit(
    compact('user_id', 'num', 'cart_cost', 'cart_status', 'delivery_cost')
);
// Три
$response = $this->ms2->invokeEvent('msOnBeforeCreateOrder', [
    'msOrder' => $msOrder,
    'order' => $this,
]);
    Dan
    Dan
    25 декабря 2023, 17:32
    0
    И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?
    Не нужно никаких js.
    Расширяете msOrderHandler переопределив метод submit. В нем проверяете
    if ($delivery_cost == 0) {
        return $this->error('Стоимость доставки не может быть равна нулю.'); //тут свое сообщение. Можно использовать ключи записей словаря
    }
      Артур Шевченко
      25 декабря 2023, 20:27
      0
      if($msOrder->get('delivery_cost') === 0){
         $modx->event->output('Error');
      }
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3