我已经构建了一个侦听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>
我已通过安装脚本
添加了属性customer_language
$customer_lang = 'customer_language';
$installer->addAttribute('order', $customer_lang, array('type'=>'varchar'));
我的sales_flat_order表中存在customer_language
列。但它没有得救。
我正在使用Magento 1.4.1.1
答案 0 :(得分:6)
您需要将属性添加到 - quote
和 sales
模型 - 才能使其发挥作用。
由于Magento会将定义的<fieldset>
*从quote
复制到order
,因此您需要相应地扩展您的覆盖类的config.xml
:
<config>
<!-- : -->
<global>
<fieldsets>
<sales_convert_quote>
<customer_language><to_order>*</to_order></customer_language>
</sales_convert_quote>
</fieldsets>
</global>
<!-- : -->
</config>
* 查看config.xml
Mages_Sales
答案 1 :(得分:5)
在此之前是否发生了交易?我的经验是,在交易仍在进行时尝试保存模型不起作用。我必须在事务之后将观察者移动到另一个事件,例如“sales_model_service_quote_submit_after”。