문제

주문에 이월 주문된 품목이 있는 경우 상태를 업데이트하고 싶습니다."격리됨"이라는 사용자 정의 상태 설정이 있는데 주문이 발견되면 이 상태로 설정하고 싶습니다.이 작업을 수행하기 위해 몇 가지 방법을 시도했지만 운이 없습니다.이것은 내 관찰자입니다. 누군가가 나에게 올바른 방향을 알려줄 수 있기를 바랍니다.

$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 아직 사용하고 있지 않다면.

다른 팁

/ app/design/frontend/base/default/template/checkout/success.phtml. (또는 /site/app/design/frontend/default/youtheme/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 
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top