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

8

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

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

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

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

user9252
источник
Нет, это не так с установкой Magento по умолчанию. Он работает полностью нормально, когда добавлено со страницы сведений или листинга. Делали ли вы какие-либо изменения в коде или с какой страницы вы пытаетесь это сделать?
Декстер
Вы можете проверить файл log.s.system.log или файл исключения.log
Pradeep Sanku
Я использую стороннюю тему. Я сделал некоторые изменения в frontend / default / {theme_name} /template/product/list.phtml. Страница загружается нормально, когда я нажимаю на нее из меню.
user9252
Я настроил этот параметр, поэтому после добавления в корзину нажмите, чтобы он перенаправил меня на ту же страницу ..
Sarfaraj Sipai

Ответы:

8

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

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-адрес реферера является внешним или что-то не так с проверкой.

Посмотрите на Mage_Core_Controller_Varien_Action::_isUrlInternalотладку, если URL-адрес является внутренним или нет.

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

Дэвид Мэннерс
источник
Я очень новичок в Magento и никогда ничего не отлаживал в Magengto. В чем заключается процесс, чтобы я мог отладить этот URL
user9252
@ user9252 Есть несколько способов сделать это, и я бы посоветовал сделать это проще всего, просто добавив несколько переменных var_dumps в функцию, чтобы увидеть, что происходит.
Дэвид Мэннерс
Я ставлю отладочный вызов после $ returnUrl = $ this-> getRequest () -> getParam ('return_url'); и было пусто, никаких предложений.
user9252
1
Я использую Bitnami и использую настройки по умолчанию. Значением по умолчанию является 192.168.1.20:80/magento . Удалить порт?
user9252
1
Я удалил номер порта: 80 из базового URL. Очистить кеш. Теперь он перенаправляет обратно на страницу списка категорий, как и планировалось.
user9252
4

В дополнение к ответу david-manners у вас также могут быть проблемы с тем, что ваш 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.

Чистое и хорошее решение описано в
/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish

Хартмут
источник
1

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

Фред К
источник