Minishop2. Изменение статуса заказа
Здравствуйте! Прошу помощи. Хочу, чтобы автоматически статус заказа менялся на «Оплачен» (id=2).
Для этого создаю плагин, ставлю системное событие «msOnCreateOrder», далее нашел код (вопрос тут ранее поднимался, но почему-то у меня это не работает):
Там же приводился кусок кода такой (но он вообще не работает):
Для этого создаю плагин, ставлю системное событие «msOnCreateOrder», далее нашел код (вопрос тут ранее поднимался, но почему-то у меня это не работает):
<?php
switch ($modx->event->name) {
case 'msOnCreateOrder':
$order = $modx->getOption('msOrder', $scriptProperties);
if (!is_object($order)) { return; }
$modx->log(modX::LOG_LEVEL_ERROR, $msOrder->get('id'));
$miniShop2 = $modx->getService('miniShop2');
$miniShop2->changeOrderStatus($msOrder->get('id'), 2);
$modx->toJSON(array(
'success' => true,
'message' => '',
'data' => array(),
));
exit(true);
break;
}
При этом статус заказа меняется, но пользователь остается в корзине с заказами. Как и описывалось в ответе, в котором нашел этот кусок кода, если убрать exit; то происходит переход на страницу успешного заказа, но статус не меняется. В чем может быть проблема.Там же приводился кусок кода такой (но он вообще не работает):
<?php
switch ($modx->event->name) {
case 'msOnCreateOrder':
if($newStatus == true)
{
$msOrder->set("status","2");
$msOrder->save();
}
break;
}
В чем может быть проблема, подскажите пожалуйста? Комментарии: 5
По возможности хотелось бы также узнать, как изменить дату заказа. Задача такая, что если после определенного времени оформляется заказ, то переносить его на +2 дня вперед.
Сейчас пишу так, но не меняется:
Сейчас пишу так, но не меняется:
// Date
$hour = date("H");
$createdon = date('Y-m-d H:i:s');
$day = 60*60*24*2;
if( $hour > 15 )
$createdon = date('Y-m-d H:i:s', time()+$day);
$msOrder->set("createdon", $createdon);
Вроде вопрос решился. Поставил все на событие «msOnSaveOrder» и все заработало.
Вопрос по изменению даты еще открыт. Прошу помощи.
Вопрос по изменению даты еще открыт. Прошу помощи.
Попробовал прямое обращение к базе данных, почему-то не меняет дату заказа, в чем может быть ошибка?
$hour = date("H");
$createdon = date('Y-m-d H:i:s');
$day = 60*60*24*2;
if( $hour > 15 ) {
$createdon = date('Y-m-d H:i:s', time()+$day);
$sql = "UPDATE modx_ms2_orders SET createdon=$createdon WHERE id=$order_id";
$result = $modx->query($sql);
}
Так и не смог решить вопрос, может кто-то подсказать? Буду очень благодарен.
Получилось сделать так:
switch ($modx->event->name) {
case 'msOnBeforeSaveOrder':
$msOrder->set('status',2);
$hour = date("H");
$after_2day = date("d-m-Y", (time()+3600*24*1));
if( $hour > 14 )
$after_2day=date("d-m-Y", (time()+3600*24*2));
$msOrder->set('createdon',$after_2day);
break;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.