最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > Magento > Magento教程 >

Magento支付流程跳过运费步骤

时间:2014-05-27 01:10来源:未知 作者:最模板zuimoban 点击:
magento的支付流程大家总是觉得很麻烦的,总共有5步,最近在做一个项目,需要把运费的这两步跳过去,最终调整为3步,在网上找了点资料,整理如下, 1.修改app\code\core\Mage\Checkout\Block \Onepag
magento的支付流程大家总是觉得很麻烦的,总共有5步,最近在做一个项目,需要把运费的这两步跳过去,最终调整为3步,在网上找了点资料,整理如下,

 

1.修改app\code\core\Mage\Checkout\Block \Onepage.php 我们需要做的是修改默认的step,就是修改getStep function

01    public function getSteps()
02     {
03     $steps = array();
04     if (!$this->isCustomerLoggedIn()) {
05     $steps['login'] = $this->getCheckout()->getStepData('login');
06     }
07     //$stepCodes = array('billing', 'shipping', 'shipping_method', 'payment', 'review');
08     $stepCodes = array('billing', 'payment', 'review');
09     foreach ($stepCodes as $step) {
10     $steps[$step] = $this->getCheckout()->getStepData($step);
11     }
12     return $steps;
13     }

2.修改app\code\core\Mage\Checkout\controllers\ OnepageController.php 删除shipping的html输出并且控制saveBillingAction() 处理后的跳转

1    protected $_sectionUpdateFunctions = array(
2     'payment-method' => '_getPaymentMethodsHtml',
3     // 'shipping-method' => '_getShippingMethodsHtml',
4     'review' => '_getReviewHtml',
5     );
01    public function saveBillingAction()
02     {
03     if ($this->_expireAjax()) {
04     return;
05     }
06     if ($this->getRequest()->isPost()) {
07     //$postData = $this->getRequest()->getPost('billing', array());
08     //$data = $this->_filterPostData($postData);
09     $data = $this->getRequest()->getPost('billing', array());
10     $customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
11     if (isset($data['email'])) {
12     $data['email'] = trim($data['email']);
13     }
14     $result = $this->getOnepage()->saveBilling($data, $customerAddressId);
15     if (!isset($result['error'])) {
16     /* check quote for virtual */
17     if ($this->getOnepage()->getQuote()->isVirtual()) {
18     $result['goto_section'] = 'payment';
19     $result['update_section'] = array(
20     'name' => 'payment-method',
21     'html' => $this->_getPaymentMethodsHtml()
22     );
23     }
24     /*elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) {
25     $result['goto_section'] = 'shipping_method';
26     $result['update_section'] = array(
27     'name' => 'shipping-method',
28     'html' => $this->_getShippingMethodsHtml()
29     );
30     $result['allow_sections'] = array('shipping');
31     $result['duplicateBillingInfo'] = 'true';
32     }*/
33     //End of Comment by Amit Bera
34     else {
35     //$result['goto_section'] = 'shipping';
36     $result['goto_section'] = 'payment';
37     }
38     }
39     $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
40     }
41     }

3.最后需要修改的是验证,如果不修改的话,会产品脚本验证的错误:app\code\core\Mage\Sales\Model\Service\ Quote.php

01    protected function _validate()
02     {
03     $helper = Mage::helper('sales');
04     if (!$this->getQuote()->isVirtual()) {
05     $address = $this->getQuote()->getShippingAddress();
06     $addressValidation = $address->validate();
07     // if ($addressValidation !== true) {
08     // Mage::throwException(
09     //$helper->__('Please check shipping address information. %s', implode(' ', $addressValidation))
10     //);
11     //}
12     // $method= $address->getShippingMethod();
13     //$rate = $address->getShippingRateByCode($method);
14     //if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
15     //Mage::throwException($helper->__('Please specify a shipping method.'));
16     //}
17     }

好了到这里,看起来已经结束了,其实,VCPHP网站模板在这里对第3步做了如下修改:

01    protected function _validate()
02    {
03        $helper = Mage::helper('sales');
04        if (!$this->getQuote()->isVirtual()) {
05            $address = $this->getQuote()->getShippingAddress();
06            $addressValidation = $address->validate();
07            if ($addressValidation !== true) {
08                Mage::throwException(
09                    $helper->__('Please check shipping address information. %s', implode(' ', $addressValidation))
10                );
11            }
12            $method= $address->getShippingMethod();
13            $rate  = $address->getShippingRateByCode($method);
14
15          //  if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
16               if (!$method || !$rate) {
17                Mage::throwException($helper->__('Please specify shipping method.'));
18            }
19
20        }
 
(责任编辑:最模板)
------分隔线----------------------------
栏目列表
推荐内容