开发者

Magento how to stop /checkout/onepage/success/ redirecting

I need to style Magento's order success page /checkout/onepage/success/, but because it redirects when there is no order session I can't refresh the page to check my changes!

Anyone know how I can temporarily stop this redirect for testing 开发者_C百科purposes?


You can change the /app/code/core/Mage/Checkout/controllers/OnepageController.php file. Modify the successAction, so it looks like this:

 public function successAction()
    {
       /*
        $session = $this->getOnepage()->getCheckout();
        if (!$session->getLastSuccessQuoteId()) {
            $this->_redirect('checkout/cart');
            return;
        }

        $lastQuoteId = $session->getLastQuoteId();
        $lastOrderId = $session->getLastOrderId();
        $lastRecurringProfiles = $session->getLastRecurringProfileIds();
        if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
            $this->_redirect('checkout/cart');
            return;
        }

        $session->clear();
        */


        $this->loadLayout();
        $this->_initLayoutMessages('checkout/session');
        Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
        $this->renderLayout();
    }

Remember to remove the comments when you're done!


You can stop checkout success page redirection after refresh page, for styling and testing purposes, with this below code:

Go to this file:

vendor/magento/module-checkout/Controller/Onepage/Success.php

and comment Out Line No : 22

//$session->clearQuote();

Now you will be able to refresh and debug success page without redirecting.

Don't forget to uncomment after working.


If anyone would be searching same solution for Magento 2 to stop redirecting from success page after page reload - here it is:

Quick and dirty solution for debug:

  1. Open /vendor/magento/module-checkout/Controller/Onepage/Success.php
  2. Comment out code

/* if (!$this->_objectManager->get('Magento\Checkout\Model\Session\SuccessValidator')->isValid()) { return $this->resultRedirectFactory->create()->setPath('checkout/cart'); } $session->clearQuote(); */

Right solution using module can be found here https://gielberkers.com/style-checkoutonepagesuccess-page-magento-2/


I suggest to replace your successAction with this code:

/**
 * Order success action
 */
public function successAction()
{

    $session = $this->getOnepage()->getCheckout();        

    $session->setLastSuccessQuoteId(20);  // <<< add your order entity ID
    $session->setLastQuoteId(20);  // <<< add your order entity ID
    $session->setLastOrderId(20);  // <<< add your order entity ID

    if (!$session->getLastSuccessQuoteId()) {
        $this->_redirect('checkout/cart');
        return;
    }

    $lastQuoteId = $session->getLastQuoteId();
    $lastOrderId = $session->getLastOrderId();
    $lastRecurringProfiles = $session->getLastRecurringProfileIds();
    if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
        $this->_redirect('checkout/cart');
        return;
    }

    #$session->clear();  // <<< comment it

    $this->loadLayout();
    $this->_initLayoutMessages('checkout/session');
    Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
    $this->renderLayout();
}

Regards


Whilst the code changes might be desirous, there is an extension specifically for this:

https://www.yireo.com/blog/1672-testing-the-magento-checkout-success-page

Disclosure: I am by no means a coder/dev, so the extension route appeals to me (even though I am comfortable making these changes).


Firefox would let you disable HTTP redirects, but you may have to temporarily hack a controller to let you stay on the page anyway.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜