Отключить перенаправление после добавления товара в корзину
Когда я добавляю что-то из category
к basket/cart
это перенаправляет меня на basket/cart
.
После поиска я обнаружил, что могу включить эту функцию в системе администрирования через
Configuration > Sales | Checkout > After Adding a Product Redirect to Shopping Cart
Теперь он перенаправляется на домашнюю страницу. Я не знаю, является ли это ошибкой в перенаправлении?
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
В дополнение к ответу Дэвида-мэннерса, у вас также могут возникнуть проблемы с вашим 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
Попробуйте установить свой web/unsecure/base_url
& web/secure/base_url
с 127.0.0.1
вместо localhost
. Для меня это сработало.