oni*_*unn 7 php magento observer-pattern
我已经建立了一个监听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());
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我已customer_language通过安装脚本添加了该属性
$customer_lang = 'customer_language';
$installer->addAttribute('order', $customer_lang, array('type'=>'varchar'));
Run Code Online (Sandbox Code Playgroud)
该customer_language列存在于sales_flat_order表中.但它没有得到保存.
我正在使用Magento 1.4.1.1
您需要将属性添加到 - 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>
Run Code Online (Sandbox Code Playgroud)
*看到config.xml的Mages_Sales
在此之前是否有交易?我的经验是,在交易仍在进行时尝试保存模型不起作用.我必须在事务之后将观察者移动到另一个事件,例如"sales_model_service_quote_submit_after".
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |