我正在研究一个观察员,一旦下订单,需要在购物车中的每个项目中添加(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();
}
}
我忘记或做错了什么想法?非常感谢。
答案 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();
}
这个想法是,如果你在行动前做,那么你就不需要调用保存,如果你在行动之后做,那么你就做了,如果你在行动之前做到这一点,你可能会无休止地结束循环,如果你不小心。