質問

注文にバックオーダーアイテムがある場合は、ステータスを更新します。 私は「隔離された」と呼ばれるカスタムステータスセットアップがあり、注文が見つかった場合はこのセットがあります。 私はこの仕事をするためにいくつかの方法を試みましたが、私は運がいません。 これは私のオブザーバーです、私は誰かが私を正しい方向に向けることができることを願っています。

$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)
}
.

役に立ちましたか?

解決

あなたが save で起動するイベントにフッキングしていると思います。前者にした場合は、あなたは無限ループを持つでしょう。各注文ステータスの更新はあなたのオブザーバーを何度も起動します。後者は、起こっているのですか。

あなたのsales_order_place_afterを見せてください。まだ使用していない場合は、config.xmlを試してください。

他のヒント

/app/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 
.

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top