Desativar o redirecionamento após a adição do produto ao carrinho

8

Quando adiciono algo do categorypara o, basket/cartele me redireciona para o basket/cart.

Após a pesquisa, descobri que podia ativar essa funcionalidade no sistema de administração via

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

Agora ele é redirecionado para a página inicial. Não sei se isso é um bug no redirecionamento?

user9252
fonte
Não, não é o caso da instalação padrão do Magento. Funciona completamente bem quando adicionado da página de detalhes ou da página de listagem. Você fez alguma modificação no código ou em qual página está tentando fazer isso?
Dexter
você pode verificar files.system.log log ou arquivo exception.log
Pradeep Sanku
Estou usando um tema de terceiros. Fiz algumas modificações no frontend / default / {theme_name} /template/product/list.phtml. A página carrega bem quando clico nela no menu.
user9252
Tenho configurado essa configuração para depois adicionar ao carrinho clique nele de me redirecionamento para mesma página ..
Sarfaraj Sipai

Respostas:

8

Se você olhar no controlador do carrinho app/code/core/Mage/Checkout/controllers/CartController.php, encontrará a função _goBack. É aqui que o URL de retorno é decidido pelo 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;
}

A seção que você está procurando é a chamada para _getRefererUrlisso acontece quando você não está definindo o URL de retorno como parâmetro e não está usando a opção padrão de redirecionamento para carrinho.

Dentro da função, _getRefererUrlo URL do referenciador é verificado para ver se é um URL interno, quando não é interno do que o URL base é usado.

Sugiro que seu URL de referência seja externo ou que haja algo errado com a verificação.

Dê uma olhada Mage_Core_Controller_Varien_Action::_isUrlInternalpara depurar se o URL é interno ou não.

O problema era que _isUrlInternal estava falhando por ter a porta na URL base

David Manners
fonte
Eu sou muito novo no Magento e nunca depurei nada antes no Magengto. Qual é o processo envolvido para que eu possa depurar este URL
user9252
@ user9252 existem várias maneiras de você fazer isso, o que eu sugeriria que seria o mais fácil seria simplesmente adicionar algumas var_dumps de variáveis ​​na função para ver o que está acontecendo.
David Manners
Eu coloquei uma chamada de depuração após $ returnUrl = $ this-> getRequest () -> getParam ('return_url'); e estava em branco, alguma sugestão.
user9252
11
Estou usando o Bitnami e usando as configurações padrão. A configuração padrão é 192.168.1.20:80/magento . Eu removo a porta?
user9252
11
Eu removi o número da porta: 80 do URL base. Lave o cache. Agora, ele é redirecionado de volta à página da lista de categorias, conforme planejado.
user9252
4

Além da resposta david-manners, você também pode ter problemas com o web/unsecure/base_url& web/secure/base_urlestar definido corretamente sem portas - mas o vhost do aplicativo real (apache / nginx) escutando em outra porta que não seja a 80/443, por exemplo, quando está executando um verniz.

Isso resultará em \Mage_Core_Helper_Url::getCurrentUrl, por exemplo, usado para adicionar os parâmetros de consulta codificados em base64 - decodificados e usados ​​por _getRefererUrlter a porta 'não padrão' como parte do URL. (por exemplo, http://www.domain.com:81/your-url.html )

Como resultado, Mage_Core_Controller_Varien_Action::_isUrlInternalretorna false ...

Para referência adicional, consulte
http://erikeng.se/post/magento-behind-varnish.html

Uma solução limpa e boa é descrita em
/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish

Hartmut
fonte
1

Tente definir seu web/unsecure/base_url& web/secure/base_urlcom 127.0.0.1no lugar de localhost. Para mim funcionou.

Fred K
fonte