我正在研究模块巫婆必须编写自定义数据来订购和报价。此数据从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。 到目前为止,我试图通过寄存器传递它,但仍然没用。
我真的很感激一些帮助。
答案 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();
}
}