2014-10-31 109 views
0

我使用安装程序脚本为订单和报价创建了一个属性。这些可以在entity_attribute表中看到。在结帐时,我想设置价值并将其与订单一起保存。我创建了一个事件和观察者函数。但价值不会节省。请任何帮助。magento自定义订单属性值不保存

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'); 
} 

谁能帮我解决这个问题。我不明白我犯了什么错误。

谢谢

回答

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(); 

} 

这样可以节省您的订单更新值。

希望这将帮助你

+0

嗨,谢谢你的回复。之前我添加了save(),但是后来出现了一个错误,说内存超出了:(我该怎么做。在我的php.ini内存中已放置为168M – KNKM 2014-10-31 05:18:20

+0

,您可以将它增加到256M或512M为你工作,也见我的更新代码 – liyakat 2014-10-31 05:19:24

+0

它不工作。是否有任何其他解决方案。我想要的是保存订单属性值在结帐。任何帮助... – KNKM 2014-10-31 05:35:59

1

你的命令 - >保存()返回sales_order_save_after,使一个无限循环。试试这个,我添加了一个注册表项,所以它不会在你的订单 - > save()调用后保存属性和顺序

public function saveLocationOrderattributes($observer){ 
     if(!Mage::registry('afterOrderSave')) 
     { 
      Mage::register('afterOrderSave'); 
      $event = $observer->getEvent(); 
      $order = $event->getOrder(); 
      $order->setLocation('1'); 
      $order->save(); 
     } 
    }