我已经构建了一个侦听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'));
customer_language
列存在于sales_flat_order表中。但是它没有被保存。
我使用Magento 1.4.1.1
您需要将您的属性添加到- quote
和 sales
模型-以使此工作
由于Magento将从quote
复制已定义的<fieldset>
*到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
子>
在此之前是否有事务发生?根据我的经验,试图在事务仍在进行时保存模型是行不通的。我必须将观察者移动到事务之后的另一个事件,例如"sales_model_service_quote_submit_after"。