[miniShop2] Как проверить стоимость доставки при оформлении заказа?
Добрый день.
Возникла необходимость ввести дополнительную проверку не равна ли стоимость доставки нулю при оформлении заказа. Необходимо делать это до создания заказа и поэтому по идее нужно использовать плагин на системное событие msOnBeforeCreateOrder, но похоже, что в него не поступают данные о стоимости доставки или я просто не понимаю как их получить. Подскажите пожалуйста.
И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?
Спасибо за помощь
Возникла необходимость ввести дополнительную проверку не равна ли стоимость доставки нулю при оформлении заказа. Необходимо делать это до создания заказа и поэтому по идее нужно использовать плагин на системное событие msOnBeforeCreateOrder, но похоже, что в него не поступают данные о стоимости доставки или я просто не понимаю как их получить. Подскажите пожалуйста.
И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?
Спасибо за помощь
Комментарии: 3
плагин на системное событие 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,
]);
И ещё один вопрос, как отловить событие из плагина на js, чтобы вывести предупреждение на фронте?Не нужно никаких js.
Расширяете msOrderHandler переопределив метод submit. В нем проверяете
if ($delivery_cost == 0) {
return $this->error('Стоимость доставки не может быть равна нулю.'); //тут свое сообщение. Можно использовать ключи записей словаря
}
if($msOrder->get('delivery_cost') === 0){
$modx->event->output('Error');
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.