观察者不保存订单

时间:2011-04-13 07:09:44

标签: 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());
    }

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

2 个答案:

答案 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”。