Ajax создание заказа и сохранение корзины
Здравствуйте!
Почти сделал, быстрый заказ он столкнулся с проблемой ответа $miniShop2->order->submit(), я его как бы сохраняю в переменную, но он ретурнит ответ, т.е. код после вызова submit не срабатывает т.к. уже ответил.
Ответ приходит такой
joxi.ru/gmvKvnNcv3O1X2
А должен выводить массив $resp.
Подскажите пожалуйста что не так?
JS
Почти сделал, быстрый заказ он столкнулся с проблемой ответа $miniShop2->order->submit(), я его как бы сохраняю в переменную, но он ретурнит ответ, т.е. код после вызова submit не срабатывает т.к. уже ответил.
Ответ приходит такой
joxi.ru/gmvKvnNcv3O1X2
А должен выводить массив $resp.
Подскажите пожалуйста что не так?
JS
$.ajax({
dataType: 'json',
type: 'POST',
url: urlRequest,
data: {
action: 'FastOrderCreate',
form: form.serializeArray()
},
success: function( r ) {
console.log( r );
......
}
});
});
PHP$scriptProperties = array(
'json_response' => 1,
'max_count' => 1,
'allow_deleted' => 0,
'allow_unpublished' => 0
);
$miniShop2 = $modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
$option = [];
$miniShop2->initialize($modx->context->key, $scriptProperties);
$resp['tmpCart'] = $tmpCart = $miniShop2->cart->get();
$miniShop2->order->clean();
$miniShop2->cart->clean();
$miniShop2->cart->add($dataForm['id'],1,$option);
$miniShop2->order->add('receiver', htmlspecialchars($name,ENT_QUOTES));
$miniShop2->order->add('phone', $dataForm["phone"]);
$miniShop2->order->add('email', $dataForm["phone"].'@'.$_SERVER['HTTP_HOST']);
$miniShop2->order->add('payment', 1);
$miniShop2->order->add( 'delivery', 1);
/* Возвращает раньше нужного кода */
$resp['arr'] = $arr = $miniShop2->order->submit();
if($arr['success']==true && $arr["data"]["msorder"]){
$resp['out'] = $pdo->parseChunk('@FILE chunks/minishop/fastOrderCreateSuccess.tpl',$arr);
}
$miniShop2->cart->set($tmpCart);
echo json_encode($resp);return;
Комментарии: 8
Я просмотрел код miniShop2, что-то не вижу, чтобы он отправлял в вывод ответ и прекращал работу php… Например success
А каких-нибудь плагинов на ms*** нет активных у сайта, которые могут так делать?
А каких-нибудь плагинов на ms*** нет активных у сайта, которые могут так делать?
это происходит, если в конфиге установлен json_response
Да, вот она и разгадка:
$scriptProperties = array(
'json_response' => 1, // ТА-ДАМ
'max_count' => 1,
'allow_deleted' => 0,
'allow_unpublished' => 0
);
это да, я менял этот флаг все работало, не написал об этом.
Но возникает другой вопрос, как получить так сказать «на месте» ид созданного заказа ?) ЧТобы вывести его пользователю.
Вот какой результат без флага json_response, в нем ничего нет соответственно
joxi.ru/vAWjKbotqeW7L2
Но возникает другой вопрос, как получить так сказать «на месте» ид созданного заказа ?) ЧТобы вывести его пользователю.
Вот какой результат без флага json_response, в нем ничего нет соответственно
joxi.ru/vAWjKbotqeW7L2
Странно… думаю, что miniShop не заточен для такого использования.
А что если: сделать запрос с json_response, получить информацию о заказе, а потом отправить серверу еще один запрос с №заказа, и уже так сказать, со второй попытки, отрендерить чанк.
А что если: сделать запрос с json_response, получить информацию о заказе, а потом отправить серверу еще один запрос с №заказа, и уже так сказать, со второй попытки, отрендерить чанк.
2 варианта:
1. Убрать оплату из заказа и вернуть json_response в конфиг, тогда exit не будет вызываться, а в ответе будет номер заказа.
2. Брать номер заказа из сессии — он добавляется туда сразу после создания заказа.
1. Убрать оплату из заказа и вернуть json_response в конфиг, тогда exit не будет вызываться, а в ответе будет номер заказа.
2. Брать номер заказа из сессии — он добавляется туда сразу после создания заказа.
Спасибо Алексей и Артем!
блин дошел до этой функции, но не изучил, развел тут целый топик.
Т.к. это быстрый заказ по сути оплата не так важна. Можно получить id заказа и потом уже присвоить в этом же коде.Воспользовался этим решением, все работает :)
joxi.ru/p27V9KytWXeRom
Где-то давно видел почему не сохраняется корзина, полагаю что-то с сессией или еще что-то делать надо?
miniShop не заточен для такого использованияНаверно конкретно в этой функии недочеты под такое.
блин дошел до этой функции, но не изучил, развел тут целый топик.
Т.к. это быстрый заказ по сути оплата не так важна. Можно получить id заказа и потом уже присвоить в этом же коде.Воспользовался этим решением, все работает :)
joxi.ru/p27V9KytWXeRom
Где-то давно видел почему не сохраняется корзина, полагаю что-то с сессией или еще что-то делать надо?
$resp['tmpCart'] = $tmpCart = $miniShop2->cart->get();
$miniShop2->order->clean();
$miniShop2->cart->clean();
............
$miniShop2->cart->set($tmpCart);
А нет, все нормально, сам закосячил.
Спасибо еще раз вам, Алексей и Артем!
Спасибо еще раз вам, Алексей и Артем!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.