Magento OnePage修改,需略过一步
Magento OnePage modification, need to skip a step
我是 Magento 的新手,我们目前使用的是 1.4 版。 OnePage结帐的步骤是:
- 结帐方法(访客或登录)
- 账单信息
- 发货信息
- 送货信息
- 支付信息
- 订单审核
我想跳过送货信息。为此,我做了两件事:
1. 更改(实际上是扩展)核心结帐 class 以不包括 #4 交付信息 ('shipping_information'
),
2. 在 Controller 中,在 saveShippingAction( ) 中调用 Checkout class 方法 saveShippingMethodAction( )(因为用户永远不会提交运输方式),并手动传递一个数据值。
一切都按预期工作,并且跳过了该步骤,但是在 Checkout::saveShippingMethodAction( ) 中有这两行:
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request'=>$this->getRequest(), 'quote'=>$this->getOnepage()->getQuote()));
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
问题出在 'request'=>$this->getRequest()
的用法上。实际请求不是 shipping_method
而是 shipping
,因此未加载输出(即应该传递给步骤 #5 的 HTML 表单字符串,付款信息),因此步骤#5 为空白。
我的第一个要求是如何模拟一个请求,但可能 "Magento Way" 可以做到这一点。任何人都可以告诉我那可能是什么,或者我如何准备 getRequest( )
甚至 getResponse( )
就好像我提交了那个特定的表格一样?谢谢!
我明白你想做什么,但我不明白你做了什么。
好的,我会向你解释一些事情 here.If 你说的是 magento 默认单页结帐而不是你说的 送货信息 它实际上是运输方式.
你也问了一些事情
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request'=>$this->getRequest(), 'quote'=>$this->getOnepage()->getQuote()));
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
它实际上与您的代码没有任何关系,因为它是插入您的事件的地方,就像一个钩子。
现在真正的问题及其 solution.I 还没有尝试过,但这应该可行。
如果您看到
app/code/core/Mage/checkout/controllers/OnepageController.php
file.You 需要在此文件中进行更改。首先将此控制器覆盖到您自己的模块,这是首选方式,但您也可以在核心文件中进行测试。
现在在这个文件中你会看到两个函数
public function saveShippingAction()
{
//This function saves the shipping information of customer
}
和
public function saveShippingMethodAction()
{
//this function saves the shipping method
}
在第一个函数中你会看到这样的代码
if (!isset($result['error'])) {
$result['goto_section'] = 'shipping_method';
$result['update_section'] = array(
'name' => 'shipping-method',
'html' => $this->_getShippingMethodsHtml()
);
}
这将重定向到运输 method.If 你想绕过运输方法步骤(在你的情况下是交货信息),然后用
替换上面的代码
if (!isset($result['error'])) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
}
这将完成控制器端的重定向部分,现在从布局文件中删除显示送货方式块的块。就是这样。
希望这对您有所帮助。
我是 Magento 的新手,我们目前使用的是 1.4 版。 OnePage结帐的步骤是:
- 结帐方法(访客或登录)
- 账单信息
- 发货信息
- 送货信息
- 支付信息
- 订单审核
我想跳过送货信息。为此,我做了两件事:
1. 更改(实际上是扩展)核心结帐 class 以不包括 #4 交付信息 ('shipping_information'
),
2. 在 Controller 中,在 saveShippingAction( ) 中调用 Checkout class 方法 saveShippingMethodAction( )(因为用户永远不会提交运输方式),并手动传递一个数据值。
一切都按预期工作,并且跳过了该步骤,但是在 Checkout::saveShippingMethodAction( ) 中有这两行:
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request'=>$this->getRequest(), 'quote'=>$this->getOnepage()->getQuote()));
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
问题出在 'request'=>$this->getRequest()
的用法上。实际请求不是 shipping_method
而是 shipping
,因此未加载输出(即应该传递给步骤 #5 的 HTML 表单字符串,付款信息),因此步骤#5 为空白。
我的第一个要求是如何模拟一个请求,但可能 "Magento Way" 可以做到这一点。任何人都可以告诉我那可能是什么,或者我如何准备 getRequest( )
甚至 getResponse( )
就好像我提交了那个特定的表格一样?谢谢!
我明白你想做什么,但我不明白你做了什么。
好的,我会向你解释一些事情 here.If 你说的是 magento 默认单页结帐而不是你说的 送货信息 它实际上是运输方式.
你也问了一些事情
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request'=>$this->getRequest(), 'quote'=>$this->getOnepage()->getQuote()));
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
它实际上与您的代码没有任何关系,因为它是插入您的事件的地方,就像一个钩子。
现在真正的问题及其 solution.I 还没有尝试过,但这应该可行。
如果您看到
app/code/core/Mage/checkout/controllers/OnepageController.php
file.You 需要在此文件中进行更改。首先将此控制器覆盖到您自己的模块,这是首选方式,但您也可以在核心文件中进行测试。
现在在这个文件中你会看到两个函数
public function saveShippingAction()
{
//This function saves the shipping information of customer
}
和
public function saveShippingMethodAction()
{
//this function saves the shipping method
}
在第一个函数中你会看到这样的代码
if (!isset($result['error'])) {
$result['goto_section'] = 'shipping_method';
$result['update_section'] = array(
'name' => 'shipping-method',
'html' => $this->_getShippingMethodsHtml()
);
}
这将重定向到运输 method.If 你想绕过运输方法步骤(在你的情况下是交货信息),然后用
替换上面的代码 if (!isset($result['error'])) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
}
这将完成控制器端的重定向部分,现在从布局文件中删除显示送货方式块的块。就是这样。
希望这对您有所帮助。