订单下达后更新项目产品选项

时间:2011-10-27 23:14:13

标签: magento observer-pattern

我正在研究一个观察员,一旦下订单,需要在购物车中的每个项目中添加(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 个答案:

答案 0 :(得分: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();
}

这个想法是,如果你在行动前做,那么你就不需要调用保存,如果你在行动之后做,那么你就做了,如果你在行动之前做到这一点,你可能会无休止地结束循环,如果你不小心。