Отключить перенаправление после добавления товара в корзину


Когда я добавляю что-то из category к basket/cart это перенаправляет меня на basket/cart.

После поиска я обнаружил, что могу включить эту функцию в системе администрирования через

Configuration > Sales | Checkout > After Adding a Product Redirect to Shopping Cart

Теперь он перенаправляется на домашнюю страницу. Я не знаю, является ли это ошибкой в перенаправлении?

Author: Prince Patel, 2014-06-24

3 answers

Если вы заглянете в контроллер корзины app/code/core/Mage/Checkout/controllers/CartController.php, вы найдете функцию _goBack. Именно здесь Magento определяет URL-адрес возврата.

protected function _goBack()
{
    $returnUrl = $this->getRequest()->getParam('return_url');
    if ($returnUrl) {

        if (!$this->_isUrlInternal($returnUrl)) {
            throw new Mage_Exception('External urls redirect to "' . $returnUrl . '" denied!');
        }

        $this->_getSession()->getMessages(true);
        $this->getResponse()->setRedirect($returnUrl);
    } elseif (!Mage::getStoreConfig('checkout/cart/redirect_to_cart')
        && !$this->getRequest()->getParam('in_cart')
        && $backUrl = $this->_getRefererUrl()
    ) {
        $this->getResponse()->setRedirect($backUrl);
    } else {
        if (($this->getRequest()->getActionName() == 'add') && !$this->getRequest()->getParam('in_cart')) {
            $this->_getSession()->setContinueShoppingUrl($this->_getRefererUrl());
        }
        $this->_redirect('checkout/cart');
    }
    return $this;
}

Раздел, который вы ищете, - это вызов _getRefererUrl это происходит, когда вы не задаете URL-адрес возврата в качестве параметра и не используете опцию перенаправления в корзину по умолчанию.

Внутри функции _getRefererUrl URL-адрес ссылки проверяется, является ли он внутренним URL-адресом, если он не является внутренним, чем используется базовый URL-адрес.

Я можно предположить, что либо ваш URL-адрес реферера является внешним, либо что-то не так с проверкой.

Посмотрите на Mage_Core_Controller_Varien_Action::_isUrlInternal, чтобы отладить, является ли URL внутренним или нет.

Проблема заключалась в том, что _isUrlInternal выходил из строя из-за наличия порта в базовом URL

 8
Author: David Manners, 2014-06-24 15:23:52

В дополнение к ответу Дэвида-мэннерса, у вас также могут возникнуть проблемы с вашим web/unsecure/base_url & web/secure/base_url правильно настроен без портов - но ваш фактический vhost приложения (apache/nginx) прослушивает какой-либо порт, отличный от 80/443, например, при работе за лаком.

Это приведет к \Mage_Core_Helper_Url::getCurrentUrl, используемому, например, для добавления параметров запроса в кодировке base64, декодированных и используемых _getRefererUrl, имеющих порт "не по умолчанию" в качестве части URL. (например, http://www.domain.com:81/your-url.html)

В результате Mage_Core_Controller_Varien_Action::_isUrlInternal возвращает значение false...

Для получения дополнительной информации см.
http://erikeng.se/post/magento-behind-varnish.html

Описано чистое и хорошее решение in
https://serverfault.com/questions/318151/how-to-set-php-server-port-var-to-80-behind-varnish

 4
Author: Hartmut, 2017-04-13 12:14:46

Попробуйте установить свой web/unsecure/base_url & web/secure/base_url с 127.0.0.1 вместо localhost. Для меня это сработало.

 1
Author: Fred K, 2016-08-10 08:59:36