Как получить список товаров и поля заказа, при оформлении заказа?
Нужно проверить товары когда нажимается кнопка оформить заказа, и получить из заказа город, пытался так msOnBeforeCreateOrder но там в $msOrder $order не нашёл товаров.
Как получить товары и 1 поле заказа при оформлении заказа?
Как получить товары и 1 поле заказа при оформлении заказа?
Комментарии: 18
Можно ли вообще получить товары в плагине, в любом плагине. без каких либо событий
Поля разные;
Товары:
$orderData = [
'order' => $msOrder->toArray(),
'delivery' => $msOrder->Delivery->toArray(),
'payment' => $msOrder->Payment->toArray(),
'address' => $msOrder->Address->toArray(),
'user' => $msOrder->User->toArray(),
'user_profile' => $msOrder->UserProfile->toArray(),
];
$modx->log(1,'Order data '.print_r($orderData, 1));
Товары:
if($orderProducts = $msOrder->getMany('Products') ) {
foreach ($orderProducts as $orderProduct) {
$orderProduct->get('count');
// ... поля товара в заказе
//$fields = $modx->getObject('msProductData', array('id' => $orderProduct->get('product_id'))
}
}
А как получить кастомное поле в форме заказа? при выводе $msOrder как оно есть через вар дамп, там я вижу своё поле но как его получить, хз, через var_dump() мне выдаёт 1,5 мегабайта текста, в котором просто так же есть и код моего плагина. А при выводе var_dump($msOrder->toArray()) я уже не вижу своего кастомного поля.
Всё нашёл, Спасибо, а можете подсказать, как мне самому доходить до такого вот как с заказом, в документации не написано что это нужно брать вот так, есть такое
Изучать исходный код компонентов. Читать схожие вопросы и инструкции здесь на форуме.
Как можно удалить товар из заказа? и вернуть ошибку, что допустим нет такого товара?
Куда вернуть ошибку? Клиенту вывести на экран в момент добавления товара в корзину? Тогда товар нужно удалять не из заказа, а из корзины.
Или же удалить из уже созданного заказа? Тогда совсем не понятно куда вернуть ошибку.
Это разные сущности, и реализация разная будет.
Или же удалить из уже созданного заказа? Тогда совсем не понятно куда вернуть ошибку.
Это разные сущности, и реализация разная будет.
При создания заказа, когда создаётся заказ, проверяется есть ли этот товар в городе который человек выбрал(проверка готова), если нет, то удалить из заказа, и вывести ошибку, есть ли встроенный функционал вывода ошибок при создании заказа? или придётся делать самому?
У вас некорректная логика. Такую ошибку нужно выводить при попытке положить товар в корзину и не давать это сделать изначально.
Здесь этот вопрос обсуждался неоднократно. Воспользуйтесь поиском.
Вот например modx.pro/help/9381
Функционал ошибок есть. Основан на плагинах. На каждое действие (почти) есть свое событие.
Список событий найдете в документации. Создаете плагин на нужное событие. Выполняете проверку — возвращаете нужный ответ
Здесь этот вопрос обсуждался неоднократно. Воспользуйтесь поиском.
Вот например modx.pro/help/9381
Функционал ошибок есть. Основан на плагинах. На каждое действие (почти) есть свое событие.
Список событий найдете в документации. Создаете плагин на нужное событие. Выполняете проверку — возвращаете нужный ответ
Да некорректная но как бы начальству похер, по этому сказали проверять при оформлении заказа, потому что при попытки положить в корзину каждый раз нужно было бы выбирать город, то есть сделано максимально под покупателя, в одном месте за раз.
Ну в целом выполнение задачи не меняется. Подберите событие, которое срабатывает перед созданием заказа, напишите плагин, реагирующий на такое событие.
Подскажите пожалуйста как удалить товары из заказа
Товары находятся не в заказе, а в корзине.
Корзина это массив данных. Получить его можно через метод
Корзина это массив данных. Получить его можно через метод
$ms2->cart->get();
Далее просто удалите ненужный элемент массива и обновите корзину через $ms->cart->set();
Спасибо большое
Я на всякий случай уточню. Вообще, то есть метод
Потому что все равно корзину перебирать и проверять наличие товара.
$ms->cart->remove($key);
Но в вашем конкретном случае мне показалось, что больше подойдет приведенный выше код. Потому что все равно корзину перебирать и проверять наличие товара.
Да тот метод выше подойдёт, но это потом, в текущем варианте без удаления будет лучше, так как человек может по ошибке выбрал город, уведомление выводится, он увидит, изменит город и всё в порядке не нужно заново добавлять товар и тд
Спасибо за ссылку, там нашёл код вывода, $modx->event->output('Вы пытаетесь положитель больше товаров чем есть в наличии'); а так же это отменяет создание заказа, и выводит то что нужно, спасибо большое
Пожалуйста. Пользоваться поиском довольно полезно.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.