在观察者方法之间传递数据
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();
}
}
我目前正在处理模块 必须编写自定义数据才能订购和报价。此数据来自 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();
}
}