Обновить статус заказа после размещения заказа
-
12-12-2019 - |
Вопрос
Я хотел бы обновить статус, если в заказе есть отложенные позиции.У меня есть специальная настройка статуса под названием «На карантине», и я бы хотел, чтобы этот статус был установлен, если заказ найден.Я попробовал несколько способов заставить это работать, но мне не повезло.Это мой наблюдатель, надеюсь, кто-нибудь сможет указать мне правильное направление.
$order = $observer->getEvent()->getOrder();
$items = $order->getAllItems();
$hasBackorderedItems = false;
foreach ($items as $item) {
if ($item->getQtyBackordered() > 0) {
$hasBackorderedItems = true;
break;
}
}
if ($hasBackorderedItems) {
// I'm Stuck here. I need to change the current order status to quarantined (which is mapped to the state processing)
}
Решение
Я предполагаю, что вы подключаетесь к событию, которое срабатывает по заказу. сохранять, нет sales_order_place_after
, который запускается один раз после завершения заказа.Если вы сделали первый вариант, то у вас будет бесконечный цикл, в котором каждое обновление статуса заказа будет запускать вашего наблюдателя снова и снова.Последнее похоже на то, что происходит.
Покажите нам свой config.xml
.Пытаться sales_order_place_after
если вы еще не используете его.
Другие советы
/ap/ap/design/frontend/base/default/template/checkout/success.phtml (или /site/app/design/frontend/default/yourtheme/template/checkout/success.phtml)
// Заказать Установить здесь
/*
const STATE_NEW = 'new';
const STATE_PENDING_PAYMENT = 'pending_payment';
const STATE_PROCESSING = 'processing';
const STATE_COMPLETE = 'complete';
const STATE_CLOSED = 'closed';
const STATE_CANCELED = 'canceled';
const STATE_HOLDED = 'holded';
const STATE_PAYMENT_REVIEW = 'payment_review';
*/
// Retrieve order
$_order = new Mage_Sales_Model_Order();
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$_order->loadByIncrementId($orderId);
// Update order
$order = Mage::getModel('sales/order')->loadByIncrementID($orderId);
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
$order->save();
// Write your success Massage here
.