Получение order_id текущего сеанса проверки в наблюдателе в Magento - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь получить order_id ордера, который был только что создан в процессе оформления заказа (после нажатия кнопки размещения заказа).

У меня есть наблюдатель, слушающий событие sales_order_place_after,Я пытаюсь получить order_id, используя этот код:

$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();

, который возвращает order_id предыдущего заказа, а не текущий заказ, который был только что создан во время оформления заказа.Если я использую что-то вроде этого:

$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('sales/order')->getLastOrderId());
$lastOrderId = $order->getIncrementId();

Я не получаю order_id.

Причина, по которой я пытаюсь это сделать, - установить весь статус ордера на удержание или ожидание.когда они создаются изначально и когда пользователь совершил успешную транзакцию, я изменю статус на обработку.

Как мне извлечь текущий order_id для сеанса проверки в процессе в пределах наблюдателя?

1 Ответ

2 голосов
/ 18 октября 2011

Если вы проверяете код и grep для события, которое вы используете:

grep 'sales_order_place_after' app/code -rsn
app/code/core/Mage/Sales/Model/Order.php:1074:        Mage::dispatchEvent('sales_order_place_after', array('order'=>$this));

тогда вы видите, что объект заказа передается событию, и в вашем методе наблюдателя вы можете сделать

public function myCreateOrderAfterObs($observer){
    $order = $observer->getEvent()->getOrder();
    $orderEntityId = $order->getId(); 
    $orderIncrementId = $order->getIncrementId();
    //print_r($order->getData());
}

Вы можете запросить все, что передано наблюдателю, и я призываю вас использовать только переданные объекты, а не некоторые глобальные элементы или элементы сеанса, поскольку они могут быть недоступны в контексте вашего наблюдателя или во время вызова наблюдателя.

...