magento自定义订单属性值不保存

时间:2014-10-31 05:05:34

标签: magento

我使用安装程序脚本为订单和报价创建了一个属性。那些可以在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');
}

任何人都可以帮我解决这个问题。我无法理解我在哪里弄错了。

谢谢

2 个答案:

答案 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();
        }
    }