Минимальный заказ
Дорогие вы мои, подскажите пожалуйста, есть ли какое готовое решение чтобы запрещать отправку формы оформления заказа или ее вывод, если сформированный заказ не дотягивает до минимальной цены?
Комментарии: 17
Нет, но можно легко реализовать при помощи:
— плагина на событие оформления заказа (msOnBeforeCreateOrder)
или
— при помощи дефолтных модкс-модификаторов от цены [[!+price]] (спрятать кнопку отправки и вывести алерт о минимальной цене)
и/или
— при помощи jquery на событие submit формы (вывести уведомление, к примеру встроенным jgrowl-скриптом).
— плагина на событие оформления заказа (msOnBeforeCreateOrder)
или
— при помощи дефолтных модкс-модификаторов от цены [[!+price]] (спрятать кнопку отправки и вывести алерт о минимальной цене)
и/или
— при помощи jquery на событие submit формы (вывести уведомление, к примеру встроенным jgrowl-скриптом).
Спасибо за совет. Второй способ не подходит, так корзина и оформление заказа находятся на одной странице и соответственно общая цена заказа может меняться если удалить товар из корзины или изменить его кол-во.
При помощи js легко обойти (только кому это надо?)
А вот про первый способ подробнее можно?
При помощи js легко обойти (только кому это надо?)
А вот про первый способ подробнее можно?
Пользуйтесь
if ($modx->event->name == 'msOnSubmitOrder'){
if($cart = $order->ms2->cart->status()) {
if($cart['total_cost'] < 1000) {
$modx->event->output('Сумма вашего заказа должна превышать 1000 руб!');
}
}
}
Уважаемый wind_, скажите, а куда надо вставлять данный код?
1) Создаёшь файл core/components/minishop2/custom/order/myorderhandler.class.php с содержимым:
2) Создаёшь настройку (желательно в namespace «minishop2») ms2_minimum_price_order со значением суммы заказа, например: 50000.
3) В настройке ms2_order_handler_class указываешь только что созданный класс обработчик, вот так: myOrderHandler.
Вроде всё…
<?php
class myOrderHandler extends msOrderHandler
{
public function submit($data = array())
{
$min_price_order = $this->modx->getOption('ms2_minimum_price_order');
$cart_status = $this->ms2->cart->status();
$currency = $this->modx->lexicon('ms2_frontend_currency');
if( $cart_status['total_cost'] < $min_price_order )
{
return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
}
return parent::submit($data);
}
}
2) Создаёшь настройку (желательно в namespace «minishop2») ms2_minimum_price_order со значением суммы заказа, например: 50000.
3) В настройке ms2_order_handler_class указываешь только что созданный класс обработчик, вот так: myOrderHandler.
Вроде всё…
Да, срабатывает если сумма ниже указанной, но при этом выдаётся предупреждение «ms2_order_err_total_price». Как и где поменять вывод ошибки, подскажите плиз?
Либо напрямую изменив код
if( $cart_status['total_cost'] < $min_price_order )
{
return $this->error( 'ТЕКСТ СООБЩЕНИЯ', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
}
либо создав в лексиконах соответствующую запись
Спасибо, Владимир, Вы гений!
Тоже самое, и этот плагин не даёт отправлять заказ через msoneclick…
if ($modx->event->name == 'msOnSubmitOrder'){
if($cart = $order->ms2->cart->status()) {
if($cart['total_cost'] < 1000) {
$modx->event->output('Сумма вашего заказа должна превышать 1000 руб!');
}
}
}
Может гуру подскажут что надо подшаманить в коде?)
Изменить его. Он наследуется от того.
Спасибо, помогло
Этот способ работает как надо на странице оформления заказа, а если делать заказ через компонент msoneclick, то он не даёт отправлять заказ в один клик. Выдаёт сообщение в ms2_order_err_total_price, хотя сумма заказа подпадает под условия.
Может кто подскажет как снять этот запрет для msoneclick?
Может кто подскажет как снять этот запрет для msoneclick?
Писать доп условие на проверку, откуда был отослан запрос.
Спасибо, только в php разбираюсь поверхностно, поэтому задам наивный вопрос, проверку в классе дописать? что то типа:
<?php
if (проверка на откуда был отослан запрос) {
class myOrderHandler extends msOrderHandler
{
public function submit($data = array())
{
$min_price_order = $this->modx->getOption('ms2_minimum_price_order');
$cart_status = $this->ms2->cart->status();
$currency = $this->modx->lexicon('ms2_frontend_currency');
if( $cart_status['total_cost'] < $min_price_order )
{
return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
}
return parent::submit($data);
}
}
}
Вот спасибо. Премного благодарен. Попробую.
Подскажите, как сделать чтобы только у определенных групп пользователей было такое ограничение по сумме корзины?
<?php
class myOrderHandler extends msOrderHandler
{
public function submit($data = array())
{
$min_price_order = $this->modx->getOption('ms2_minimum_price_order');
$cart_status = $this->ms2->cart->status();
$currency = $this->modx->lexicon('ms2_frontend_currency');
$userid = $modx->user->get('id');
$user = $modx->getObject('modUser',array('active' => true, 'id' => $userid ));
if($user->isMember(array('Administrator','Manager')) && $cart_status['total_cost'] < $min_price_order)
{
return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) );
}
return parent::submit($data);
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.