Disabilita il reindirizzamento dopo l'aggiunta del prodotto al carrello


8

Quando aggiungo qualcosa da a categorya basket/cart, mi reindirizza a basket/cart.

Dopo aver cercato, ho scoperto che potevo attivare questa funzionalità nel sistema di amministrazione tramite

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

Ora reindirizza alla Home page. Non so se questo è un bug nel reindirizzamento?


No, non è così con l'installazione di Magento predefinita. Funziona perfettamente se aggiunto dalla pagina dei dettagli o dalla pagina di elenco. Hai apportato modifiche al codice o da quale pagina stai provando a farlo?
Dexter,

puoi controllare il file files.system.log o exception.log
Pradeep Sanku,

Sto usando un tema di terze parti. Ho apportato alcune modifiche al frontend / default / {theme_name} /template/product/list.phtml. La pagina si carica quando faccio clic su di essa dal menu.
user9252,

ho configurato questa impostazione, quindi dopo aggiungi al carrello fai clic su mi reindirizza alla stessa pagina ..
Sarfaraj Sipai

Risposte:


8

Se guardi nel controller del carrello app/code/core/Mage/Checkout/controllers/CartController.phptroverai la funzione _goBack. È qui che l'URL di ritorno è deciso da 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;
}

La sezione che stai cercando è la chiamata a _getRefererUrlquesto accade quando non si imposta l'URL di ritorno come parametro e non si utilizza l'opzione di reindirizzamento predefinito al carrello.

All'interno della funzione _getRefererUrlviene verificato l'URL di riferimento per vedere se si tratta di un URL interno, quando non è interno rispetto all'URL di base.

Suggerirei che l'URL del tuo referrer sia esterno o che ci sia qualcosa di sbagliato nel controllo.

Dai un'occhiata al Mage_Core_Controller_Varien_Action::_isUrlInternaldebug se l'URL è interno o meno.

Il problema era che _isUrlInternal non funzionava a causa della porta nell'URL di base


Sono molto nuovo a Magento e non ho mai eseguito il debug di nulla a Magengto. Qual è il processo coinvolto in modo che io possa eseguire il debug di questo URL
user9252

@utente9252 ci sono molti modi in cui potresti fare questo, quello che suggerirei potrebbe essere il più semplice sarebbe semplicemente aggiungere alcuni var_dumps di variabili nella funzione per vedere cosa sta succedendo.
David Manners,

Ho inserito una chiamata di debug dopo $ returnUrl = $ this-> getRequest () -> getParam ('return_url'); ed era vuoto, eventuali suggerimenti.
user9252,

1
Sto usando Bitnami e sto usando le impostazioni predefinite. L'impostazione predefinita è 192.168.1.20:80/magento . Rimuovo la porta?
user9252,

1
Ho rimosso il numero di porta: 80 dall'URL di base. Svuota la cache. Ora reindirizza nuovamente alla pagina dell'elenco delle categorie come pianificato.
user9252,

4

Oltre alla risposta di David-Manners, anche tu potresti avere problemi con il tuo web/unsecure/base_url& web/secure/base_urlessere impostato correttamente senza porte - ma il tuo vhost app (apache / nginx) in ascolto su una porta diversa da 80/443, ad esempio quando corri dietro la vernice.

Ciò si tradurrà in \Mage_Core_Helper_Url::getCurrentUrl, utilizzato ad esempio per aggiungere i parametri di query codificati in base64 - decodificati e utilizzati _getRefererUrlavendo la porta "non predefinita" come parte dell'URL. (ad es. http://www.domain.com:81/your-url.html )

Di conseguenza Mage_Core_Controller_Varien_Action::_isUrlInternalrestituisce false ...

Per ulteriori riferimenti, consultare
http://erikeng.se/post/magento-behind-varnish.html

Una soluzione pulita e buona è descritta in
/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish


1

Prova a impostare il tuo web/unsecure/base_urle web/secure/base_urlcon 127.0.0.1al posto di localhost. Per me ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.