2011-10-27 8 views
1

私はオーダーが行われたらカートの各アイテムに(a)シリアルキーを追加する必要があるオブザーバーに取り組んでいます。アイテムを更新した後に商品を注文しました

私はイベントsales_model_service_quote_submit_successを今聞いています。

私は注文にアクセスし、アイテムのリストを取得し、それらを反復して、製品オプションを得ることができました。私のコードは、setProductOptionsを試みたり保存したりするときに失敗します。どちらがどちらかというとわかりません。私は忘れたり、間違ってやっていること

// Get access to order information 
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId(); 
$order = Mage::getModel('sales/order')->load($lastOrderId); 

// Get the items from the order 
$items = $order->getAllItems(); 

foreach ($items as $item) 
{ 
    // Pretend here is the call that fetches the serial keys for this item and stores them in $keyString 

    // If we actually received the keys in a string, store them with the item 
    if (!empty($keyString)) 
    { 
     $productOptions = array(); 
     if (count($item->getProductOptions())) 
     { 
      $productOptions = $item->getProductOptions(); 
     } 
     $productOptions['keys'] = $keyString; 

     $item->setProductOptions($productOptions); 
     $item->save(); 
    } 
} 

任意のアイデア:ここ

は、関連するコードですか?本当にありがとう。

答えて

1

そのような観察者が、少なくとも私はコードベースからそれを見つけることができませんでした、ここにあなたが

Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order'=>$order, 'quote'=>$quote)); 
Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order'=>$order, 'quote'=>$quote)); 

を使用することができるものませんし、あなたのオブザーバー方法

/** 
* 
* @param Varien_Event_Observer $observer 
* 
*/ 
public function setShippingDefaults(Varien_Event_Observer $observer) { 
    $order = $observer->getEvent()->getOrder(); 
} 

にアイデアは、あなたがしなければということですそれ以前のアクションでは、saveを呼び出す必要はありません。もしあなたがそれをafter-actionで実行するのであれば、あなたはそうします。もしあなたが前のアクションでそれを行うならば、注意しない限り無限ループで終わるかもしれません。

+0

あなたのご意見をいただきありがとうございます。私はこのアプローチについて2つの考えを持っています。まず、イベントはうまくディスパッチされていたので、オブザーバーが使用されていないわけではありません。イベントの問題です。次に、キーを顧客にリリースする前に注文が成功したことを確認する必要があるため、注文、変更、再保存は基本的に不可避です。 –

+0

Antonあなたが私に言ったことのいくつかは、自分の状況に合っていませんでしたが、order変数にアクセスするための新しいコード行が働いていました($ order = $ observer-> getEvent() - > getOrder();)。私はなぜ可変構造が異なっているのか、あるいは異なるアクセス権を持っているのかよくわかりませんが、変数にアクセスするこの新しい方法がこのトリックでした。私の問題を調べる時間をとってくれてありがとう! –

+0

@Antonあなたが言及したように、このようなオブザーバsales_model_service_quote_submit_successはありませんが、私はこのオブザーバをapp/code/core/Mage/CatalogInventory/etc/config.xmlで見つけました。これについて何か説明がありますか? – shashank

関連する問題