我使用安装程序脚本为订单和报价创建了一个属性。那些可以在entity_attribute表中看到。在结帐时,我想设置值并将其与订单一起保存。我创建了一个事件和观察者功能。但价值不会节省。请帮忙。
config.xml中
<sales_order_save_after>
<observers>
<clickandcollect_save_location_orderattributes>
<type>model</type>
<class>Balance_Clickandcollect_Model_Observer</class>
<method>saveLocationOrderattributes</method>
</clickandcollect_save_location_orderattributes>
</observers>
</sales_order_save_after>
Observer.php
public function saveLocationOrderattributes($observer){
$event = $observer->getEvent();
$order = $event->getOrder();
//$quote = $event->getQuote();
$order->setLocation('1');
}
任何人都可以帮我解决这个问题。我无法理解我在哪里弄错了。
谢谢
答案 0 :(得分:1)
我认为您缺少保存方法
你必须改变你的观察者代码,如下所示
public function saveLocationOrderattributes($observer){
$event = $observer->getEvent();
$order = $event->getOrder();
//$quote = $event->getQuote();
//or load the order
$order_id = $order->getId();
$order = Mage::getModel('sales/order')->load($order_id);
$order->setLocation('1');
$order->save();
}
因此它会保存您的订单更新值。
希望这会对你有所帮助
答案 1 :(得分:1)
您的订单 - &gt; save()返回到sales_order_save_after并进行无限循环。试试这个,我添加了一个注册表项,因此它不会在你的订单后保存属性和订单 - &gt; save()调用
public function saveLocationOrderattributes($observer){
if(!Mage::registry('afterOrderSave'))
{
Mage::register('afterOrderSave');
$event = $observer->getEvent();
$order = $event->getOrder();
$order->setLocation('1');
$order->save();
}
}