Наблюдатель не сохраняет заказ - PullRequest
7 голосов
/ 13 апреля 2011

Я создал наблюдателя, который прослушивает событие 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

Ответы [ 2 ]

6 голосов
/ 18 апреля 2011

Вам нужно добавить свой атрибут в обе модели - 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

5 голосов
/ 18 апреля 2011

есть ли транзакция, происходящая до этого?По моему опыту, попытка сохранить модель, когда транзакция еще выполняется, не работает.Вместо транзакции мне пришлось переместить наблюдателя в другое событие, например «sales_model_service_quote_submit_after».

...