For my Code flow , I am trying to change below files
'login', 'billing', 'shipping', 'shipping_method', 'payment', 'review' -> 'login', 'billing', 'shipping', 'shipping_method', 'review' , 'payment'
I have changed the below things, All the changes has been done by taking a copy to local/**/**method, not directly to magento core files. e.g app/code/local/Mage/Checkout/Block
Mage_Checkout_Block_Onepage_Abstract
protected function _getStepCodes() { // return array('login', 'billing', 'shipping', 'shipping_method', 'payment', 'review'); //changes to display order review before payment. return array('login', 'billing', 'shipping', 'shipping_method', 'review', 'payment'); }
Mage_Checkout_OnepageController
public function saveShippingMethodAction() { if ($this->_expireAjax()) { return; } if ($this->getRequest()->isPost()) { $data = $this->getRequest()->getPost('shipping_method', ''); $result = $this->getOnepage()->saveShippingMethod($data); // $result will contain error data if shipping method is empty if (!$result) { Mage::dispatchEvent( 'checkout_controller_onepage_save_shipping_method', array( 'request' => $this->getRequest(), 'quote' => $this->getOnepage()->getQuote())); $this->getOnepage()->getQuote()->collectTotals(); $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); $this->loadLayout('checkout_onepage_review'); $result['goto_section'] = 'review'; $result['update_section'] = array( 'name' => 'review', 'html' => $this->_getReviewHtml() ); //commented for process change // $result['goto_section'] = 'payment'; // $result['update_section'] = array( // 'name' => 'payment-method', // 'html' => $this->_getPaymentMethodsHtml() // ); } $this->getOnepage()->getQuote()->collectTotals()->save(); $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); } } public function savePaymentAction() { if ($this->_expireAjax()) { return; } try { if (!$this->getRequest()->isPost()) { $this->_ajaxRedirectResponse(); return; } $data = $this->getRequest()->getPost('payment', array()); $result = $this->getOnepage()->savePayment($data); // get section and redirect data $redirectUrl = $this->getOnepage()->getQuote()->getPayment()->getCheckoutRedirectUrl(); if (empty($result['error']) && !$redirectUrl) { //commeted for process change // $this->loadLayout('checkout_onepage_review'); // $result['goto_section'] = 'review'; // $result['update_section'] = array( // 'name' => 'review', // 'html' => $this->_getReviewHtml() // ); } if ($redirectUrl) { $result['redirect'] = $redirectUrl; } } catch (Mage_Payment_Exception $e) { if ($e->getFields()) { $result['fields'] = $e->getFields(); } $result['error'] = $e->getMessage(); } catch (Mage_Core_Exception $e) { $result['error'] = $e->getMessage(); } catch (Exception $e) { Mage::logException($e); $result['error'] = $this->__('Unable to set Payment Method.'); } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); }
skin/frontend/theme/default/js/opcheckout.js
Checkout.prototype = { initialize: function(accordion, urls){ this.accordion = accordion; this.progressUrl = urls.progress; this.reviewUrl = urls.review; this.saveMethodUrl = urls.saveMethod; this.failureUrl = urls.failure; this.billingForm = false; this.shippingForm= false; this.syncBillingShipping = false; this.method = ''; this.payment = ''; this.loadWaiting = false; //this.steps = ['login', 'billing', 'shipping', 'shipping_method', 'payment', 'review']; //changes to change steps in checkout process this.steps = ['login', 'billing', 'shipping', 'shipping_method', 'review', 'payment']; //We use billing as beginning step since progress bar tracks from billing this.currentStep = 'billing'; this.accordion.sections.each(function(section) { Event.observe($(section).down('.step-title'), 'click', this._onSectionClick.bindAsEventListener(this)); }.bind(this)); this.accordion.disallowAccessToNextSections = true; } setShippingMethod: function() { //this.nextStep(); //removed for process change // this.gotoSection('payment', true); //this.accordion.openNextSection(true); //added for process change this.gotoSection('review', true); alert("method invoked"); }, setPayment: function() { //this.nextStep(); //removed for process change // this.gotoSection('review', true); //this.accordion.openNextSection(true); //added for process change this.reloadProgressBlock(); }, setReview: function() { //removed for process change //this.reloadProgressBlock(); //addded for process change this.gotoSection('payment', true); //this.nextStep(); //this.accordion.openNextSection(true); },
Not sure what us wrong or what I am missing, the steps are displayed in peroper order as expected by after shipping method, the next button takes to payment instead of review.
any help would be appreciated.