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

Pass data between observer methods

我目前正在处理模块 必须编写自定义数据才能订购和报价。此数据来自 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>

这是观察者 class:

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->_stoQue 值。它在 setStoqueVal 方法中已更改,但是当我尝试在 saveDataToOrder 方法中获取此值时,它 return NULL 即使在 config.xml 中设置了单例。 到目前为止,我已经尝试通过寄存器传递它,但仍然没有用。

非常感谢您的帮助。

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

观察者方法如下:

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