Deshabilite la redirección después de que el producto agregue al carrito

8

Cuando agrego algo del categoryal basket/cartme redirige al basket/cart.

Después de buscar, descubrí que podía activar esta funcionalidad en el sistema de administración a través de

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

Ahora redirige a la página de inicio. No sé si esto es un error en la redirección?

usuario9252
fuente
No, ese no es el caso con la configuración predeterminada de Magento. Funciona completamente bien cuando se agrega desde la página de detalles o la página de listado. ¿Ha realizado alguna modificación en el código o desde qué página está tratando de hacerlo?
Dexter
¿puede consultar el archivo de registro files.system.log o exception.log
Pradeep Sanku
Estoy usando un tema de terceros. He realizado algunas modificaciones en el frontend / default / {theme_name} /template/product/list.phtml. La página se carga bien cuando hago clic en ella desde el menú.
user9252
He configurado esta configuración, así que después de agregar al carrito, haga clic en Me redirigirá a la misma página ...
Sarfaraj Sipai

Respuestas:

8

Si observa el controlador del carrito app/code/core/Mage/Checkout/controllers/CartController.php, encontrará la función _goBack. Aquí es donde Magento decide la URL de retorno.

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;
}

La sección que está buscando es la llamada a que _getRefererUrlesto suceda cuando no está configurando la URL de retorno como un parámetro y no está utilizando la opción de redireccionamiento predeterminado al carrito.

Dentro de la función, _getRefererUrlse verifica la url de referencia para ver si es una url interna, cuando no es interna, se utiliza la url base.

Sugeriría que su URL de referencia sea externa o que haya algún problema con el cheque.

Eche un vistazo Mage_Core_Controller_Varien_Action::_isUrlInternalpara depurar si la url es interna o no.

El problema era que _isUrlInternal fallaba por tener el puerto en la url base

David modales
fuente
Soy muy nuevo en Magento y nunca depuré nada antes en Magengto. ¿Cuál es el proceso en cuestión para que pueda depurar este URL
user9252
@ user9252 hay muchas maneras en que podría hacer esto, lo que sugeriría que sería la más fácil sería simplemente agregar algunos var_dumps de variables en la función para ver qué está sucediendo.
David Manners
Puse una llamada de depuración después de $ returnUrl = $ this-> getRequest () -> getParam ('return_url'); y estaba en blanco, cualquier sugerencia.
user9252
1
Estoy usando Bitnami y estoy usando la configuración predeterminada. La configuración predeterminada es 192.168.1.20:80/magento . ¿Quito el puerto?
user9252
1
He eliminado el número de puerto: 80 de la url base. Vaciar el caché. Ahora redirige a la página de la lista de categorías según lo planeado.
user9252
4

Además de David-modales respuesta, usted puede también tener problemas con su web/unsecure/base_urly web/secure/base_urlse establece correctamente y sin puertos - pero su aplicación host virtual real (Apache / nginx) escucha en un puerto que no sea 80/443, por ejemplo, cuando se ejecuta detrás de barniz.

Esto resultará en \Mage_Core_Helper_Url::getCurrentUrl, por ejemplo, usado para agregar los parámetros de consulta codificados en base64 , decodificados y utilizados al _getRefererUrltener el puerto 'no predeterminado' como parte de la url. (por ejemplo, http://www.domain.com:81/your-url.html )

Como resultado Mage_Core_Controller_Varien_Action::_isUrlInternaldevuelve falso ...

Para obtener más información, consulte
http://erikeng.se/post/magento-behind-varnish.html

Una solución limpia y buena se describe en
/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish

Hartmut
fuente
1

Intente configurar su web/unsecure/base_url& web/secure/base_urlcon 127.0.0.1en lugar de localhost. Para mí funcionó.

Fred K
fuente