Можно ли из плагина вызвать уведомление?
Добрый вечер, всем, кто нибудь подскажите —
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
if ($modx->event->name == 'msOnSubmitOrder'){
if($cart = $order->ms2->cart->status()) {
if($cart['total_cost'] < 1500) {
$modx->event->output('Сумма вашего заказа должна превышать 1500 руб!');
}
}
}
Комментарии: 8
У меня вот так работает на одном из проектов
$message = "Минимальная сумма для подачи заявки равна: ".$mincost;
$data = array('success' => false, 'message' => $message);
return $modx->event->output($message);
В общем так и не получилось у меня реализовать всё только через плагин, пришлось использовать коллбеки 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 руб!');
}
}
}
Сообщение от него конечно не появляется, но заказ не будет отправлен, а так как страница перезагрузится, то и скрипты и статические проверки прямо в шаблоне страницы снова сработают и будут выведены сообщения о минимальной цене заказа.Маленькое уточнение — задача была на минимальную стоимость заказа без учёта доставки или ещё чего-то, только сумма товаров в корзине.
Так ты делай как у меня в комменте через return и передай массив в output и будет счастье.
Ром, вот не поверишь, но я уже пробовал твой вариант, кстати, у тебя там опечатка в комментарии
Поэтому решил по-другому.
Вообще конечно интересно, как это сообщение вообще должно появится если страница полностью перезагружается при нажатии на submit? Форма заказа не через ajax же отправляется.
return $modx->event->output($data);
Я попробовал так — но ничего не выводится, страница просто перезагружается и тишина)Поэтому решил по-другому.
Вообще конечно интересно, как это сообщение вообще должно появится если страница полностью перезагружается при нажатии на submit? Форма заказа не через ajax же отправляется.
у тебя там опечатка в комментарииКод скопирован с рабочего сайта, какая опечатка?
Я вечером, уточню событие на которое срабатывает плагин.
Ты написал, что в output нужно передать массив, а в твоем комментарии передаётся строка — в этом опечатка.
Ага, понял, в общем вот такой код у меня работает:
Но minishop подхватывает это уведомление и выводит ошибку, при этом форма не отправляется.
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 подхватывает это уведомление и выводит ошибку, при этом форма не отправляется.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.