【问题标题】:Magento - Can not save second custom attribute to order with ObserverMagento - 无法保存第二个自定义属性以使用观察者订购
【发布时间】:2015-09-24 15:48:50
【问题描述】:

我正在开发一个自定义扩展,在创建新订单时我必须保存两个自定义属性。我有两个自定义输入用于放置数据。

当我使用第一个输入提交数据时,没有问题,数据被保存,之后我可以将其打印到管理订单视图页面。

这是我的配置文件:

<?xml version="1.0"?>
<config>
    <modules>
        <VivasIndustries_Vshippingone>
            <version>1.1</version>
        </VivasIndustries_Vshippingone>
    </modules>

    <global> 
         <fieldsets>
            <sales_convert_quote>                           
                <my_custom_input_field_one><to_order>*</to_order></my_custom_input_field_one>
                <my_custom_input_field_two><to_order>*</to_order></my_custom_input_field_two>
            </sales_convert_quote>

            <sales_convert_order>                                              
                <my_custom_input_field_one><to_quote>*</to_quote></my_custom_input_field_one>
                <my_custom_input_field_two><to_quote>*</to_quote></my_custom_input_field_two>
            </sales_convert_order>
        </fieldsets>
        <helpers>
            <vshippingone>
                <class>VivasIndustries_Vshippingone_Helper</class>
            </vshippingone>            
        </helpers>

        <models>
            <vshippingone>
                <class>VivasIndustries_Vshippingone_Model</class>
                <resourceModel>vshippingone_mysql4</resourceModel>
            </vshippingone>
        </models>
        <resources>
            <vshippingone_setup>
                <setup>
                    <module>VivasIndustries_Vshippingone</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </vshippingone_setup>
            <vshippingone_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </vshippingone_write>
            <vshippingone_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </vshippingone_read>
        </resources>

        <events>
            <checkout_controller_onepage_save_shipping_method>
                 <observers>
                     <vshippingone>
                          <type>singleton</type>
                          <class>vshippingone/observer</class>
                          <method>saveCustomDataOne</method>
                     </vshippingone>
                 </observers>
            </checkout_controller_onepage_save_shipping_method>
            <checkout_controller_onepage_save_shipping_method>
                 <observers>
                     <vshippingone>
                          <type>singleton</type>
                          <class>vshippingone/observer</class>
                          <method>saveCustomDataTwo</method>
                     </vshippingone>
                 </observers>
            </checkout_controller_onepage_save_shipping_method>         
        </events>

        <blocks>
            <vshippingone>
                <class>VivasIndustries_Vshippingone_Block</class>
            </vshippingone>
        </blocks>
    </global>
</config>

这是我的观察者:

<?PHP
class VivasIndustries_Vshippingone_Model_Observer 
{
    public function saveCustomDataOne($event)
    {
        $quote = $event->getQuote();
        $quote->setData('my_custom_input_field_one', $event->getRequest()->getPost('shipping_address_id'));

        return $this;
    }
    public function saveCustomDataTwo($event)
    {
        $quote = $event->getQuote();
        $quote->setData('my_custom_input_field_two', $event->getRequest()->getPost('shipping_office'));

        return $this;
    }   
}

不知何故,我在第二个自定义字段中出错了。数据不会保存到数据库中。我的错误在哪里,我怎样才能让它保存数据?

提前致谢!

【问题讨论】:

    标签: php magento attributes


    【解决方案1】:

    试试这个:

        <events>
            <checkout_controller_onepage_save_shipping_method>
                 <observers>
                     <vshippingone>
                          <type>singleton</type>
                          <class>vshippingone/observer</class>
                          <method>saveCustomDataOne</method>
                     </vshippingone>
                     <vshippingtwo>
                          <type>singleton</type>
                          <class>vshippingone/observer</class>
                          <method>saveCustomDataTwo</method>
                     </vshippingtwo>
                 </observers>
            </checkout_controller_onepage_save_shipping_method>         
        </events>
    

    您有两个名为 vshippingone 的观察者,它们都可以在 checkout_controller_onepage_save_shipping_method 标记内

    【讨论】:

    • 我必须创建另一个观察者文件吗?
    • 我不这么认为,你调用的两个方法(saveCustomDataOne 和 saveCustomDataTwo)都在同一个类中(VivasIndustries_Vshippingone_Model_Observer),所以用 events 标签替换你当前的我上面所说的应该可以正常工作
    • 它仍然没有将数据保存到列my_custom_input_field_two。我不明白我的错误在哪里。
    • 你启用缓存了吗?
    • 没有。它未启用。
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多