在观察者方法之间传递数据

时间:2018-03-23 11:32:13

标签: magento-1.9 observers

我正在研究模块巫婆必须编写自定义数据来订购和报价。此数据从onestep / checkout传递。我已通过编辑模板在发货方法部分添加了复选框。

到目前为止,我已经创建了订单和报价的属性,安装脚本会显示在表格中:

$installer = $this;
$installer->startSetup();
$installer->addAttribute('order', 'stoque', array(
    'type'              =>'int',
    'label'             => 'Que to service station',
    'global'            => 1,
    'visible'           => 1,
    'required'          => 0,
    'user_defined'      => 1,
    'searchable'        => 0,
    'filterable'        => 0,
    'comparable'        => 0,
    'visible_on_front'  => 1,
    'visible_in_advanced_search' => 0,
    'unique'            => 0,
    'is_configurable'   => 0,
    'position'          => 1,
));
$installer->addAttribute('quote', 'stoque', array(
    'type'              =>'int',
    'label'             => 'Que to service station',
    'global'            => 1,
    'visible'           => 1,
    'required'          => 0,
    'user_defined'      => 1,
    'searchable'        => 0,
    'filterable'        => 0,
    'comparable'        => 0,
    'visible_on_front'  => 1,
    'visible_in_advanced_search' => 0,
    'unique'            => 0,
    'is_configurable'   => 0,
    'position'          => 1,
));
$installer->endSetup();

这是config.xml全局部分

    <models>
        <modulename>
            <class>Vendor_Module_Model</class>
        </modulename>
    </models>
    <fieldsets>
        <sales_convert_quote>
            <attributename><to_order>*</to_order></attributename>
        </sales_convert_quote>

        <sales_convert_order>
            <attributename><to_quote>*</to_quote></attributename>
        </sales_convert_order>
    </fieldsets>
    <modulename_write>
        <connection>
            <use>core_write</use>
        </connection>
    </modulename_write>
    <modulename_read>
        <connection>
            <use>core_read</use>
        </connection>
    </modulename_read>
    <resources>
        <modulename_setup>
            <setup>
                <module>Vendor_Module</module>
                <class>Mage_Sales_Model_Mysql4_Setup</class>
            </setup>
        </modulename_setup>
    </resources>
    <events>
        <checkout_controller_onepage_save_shipping_method>
            <observers>
                <modulename_observer>
                    <class>modulename/observer</class>
                    <method>setStoqueVal</method>
                </modulename_observer>
            </observers>
        </checkout_controller_onepage_save_shipping_method>
        <checkout_type_onepage_save_order>
            <observers>
                <modulename_observer_order>
                    <class>modulename/observer</class>
                    <method>saveDataToOrder</method>
                </modulename_observer_order>
            </observers>
        </checkout_type_onepage_save_order>
    </events>
</global>

这是Observer类:

protected $_stoQue;

public function setStoqueVal($observer){
    $fieldVal = Mage::app()->getFrontController()->getRequest()->getParam('stoque');
    if($fieldVal){
        $this->_stoQue = true;
    }else{
        $this->_stoQue = false;
    }
}
public function saveDataToOrder($observer) {

    var_dump($this->_stoQue);

    die;
}

HTML:

 <input type="checkbox" name="stoque" class="stoque-checkbox">

正如您所看到的,当我选中复选框时,我正在尝试更改$ this-&gt; _stoQue值。并且它在setStoqueVal方法中被更改,但是当我尝试在saveDataToOrder方法中获取此值时,即使在config.xml中设置了singleton,它也会返回NULL。 到目前为止,我试图通过寄存器传递它,但仍然没用。

我真的很感激一些帮助。

1 个答案:

答案 0 :(得分:0)

好的,所以我在不传递数据的情况下解决了这个问题,但只创建了一个观察者,并首先保存数据。两个表中的字段名称相似,因此引用的数据会自动保存到订单中。

这是观察者方法:

    public function setStoqueVal($observer){
    $fieldVal = Mage::app()->getFrontController()->getRequest()->getParam('stoque');
    $quote = $observer->getEvent()->getQuote();
    if (!empty($fieldVal) && $fieldVal == "on") {
        $quote->setStoque(1);
        $quote->save();
    }
}