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

这将完成控制器端的重定向部分,现在从布局文件中删除显示送货方式块的块。就是这样。

希望这对您有所帮助。