问题描述
|
我已经建立了一个监听
sales_convert_quote_to_order
事件的观察者。事件被触发,我只想向订单的属性添加一个值。该属性已设置-如在日志中打印的-但magento不会保存订单。我做错了什么?
Observer.PHP
public function addLangToOrder($observer){
Mage::log(\'catching convert_quote_to_order_after\');
$order = $observer->getEvent()->getorder();
$order->setCustomerLanguage(Mage::app()->getStore()->getCode());
$order->save();
Mage::log($order->getCustomerLanguage());
}
config.xml
<events>
<sales_convert_quote_to_order>
<observers>
<accustomer>
<type>singleton</type>
<class>Ac_Customer_Model_Observer</class>
<method>addLangToOrder</method>
</accustomer>
</observers>
</sales_convert_quote_to_order>
</events>
我已经通过安装脚本添加了属性“ 3”
$customer_lang = \'customer_language\';
$installer->addAttribute(\'order\',$customer_lang,array(\'type\'=>\'varchar\'));
我的sales_flat_order表中有“ 3”列。但是不会保存。
我正在使用Magento 1.4.1.1
解决方法
您需要同时向
quote
模型和sales
模型添加属性,才能使此工作有效。
由于Magento会将定义的<fieldset>
*从ѭ6复制到order
,因此您也需要相应地扩展覆盖类的config.xml
:
<config>
<!-- : -->
<global>
<fieldsets>
<sales_convert_quote>
<customer_language><to_order>*</to_order></customer_language>
</sales_convert_quote>
</fieldsets>
</global>
<!-- : -->
</config>
*请参阅ѭ14的config.xml
,在此之前有交易发生吗?根据我的经验,在事务仍在进行时尝试保存模型不起作用。我不得不在事务处理之后将观察者移至另一个事件,例如\“ sales_model_service_quote_submit_after \”。