Nonaktifkan redirect setelah produk ditambahkan ke keranjang

8

Ketika saya menambahkan sesuatu dari categoryke basket/cartitu mengarahkan saya ke basket/cart.

Setelah mencari saya menemukan bahwa saya dapat mengubah fungsi ini dalam sistem admin via

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

Sekarang dialihkan ke halaman Beranda. Saya tidak tahu apakah ini bug dalam pengalihan?

pengguna9252
sumber
Tidak, bukan itu masalahnya dengan Magento Setup default. Ini berfungsi dengan baik jika ditambahkan dari halaman detail atau halaman daftar. Sudahkah Anda melakukan modifikasi dalam kode atau dari halaman mana Anda mencoba melakukannya?
Dexter
Anda dapat memeriksa log files.system.log atau file exception.log
Pradeep Sanku
Saya menggunakan tema pihak ke-3. Saya telah melakukan beberapa modifikasi di frontend / default / {theme_name} /template/product/list.phtml. Halaman dimuat dengan baik ketika saya mengkliknya dari menu.
user9252
saya telah mengonfigurasi pengaturan ini jadi setelah ditambahkan ke klik klik itu mengarahkan saya ke halaman yang sama ..
Sarfaraj Sipai

Jawaban:

8

Jika Anda melihat pengontrol keranjang, app/code/core/Mage/Checkout/controllers/CartController.phpAnda akan menemukan fungsinya _goBack. Di sinilah url kembali diputuskan oleh 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;
}

Bagian yang Anda cari adalah panggilan untuk _getRefererUrlini terjadi ketika Anda tidak menetapkan url kembali sebagai parameter dan tidak menggunakan opsi pengalihan default ke keranjang.

Di dalam fungsi _getRefererUrlurl pengarah diperiksa untuk melihat apakah itu adalah url internal, ketika itu tidak internal daripada url dasar yang digunakan.

Saya menyarankan agar url referer Anda eksternal atau ada yang salah dengan cek.

Coba lihat Mage_Core_Controller_Varien_Action::_isUrlInternaluntuk debug jika url internal atau tidak.

Masalahnya adalah _isUrlInternal gagal karena memiliki port di url dasar

David Manners
sumber
Saya sangat baru di Magento dan tidak pernah memperdebatkan apa pun sebelumnya di Magengto. Apa proses yang terlibat sehingga saya dapat men-debug URL ini
user9252
@ user9252 mungkin ada cara Anda bisa melakukan hal ini, apa yang saya sarankan bisa menjadi yang paling mudah adalah dengan menambahkan beberapa var_dumps variabel dalam fungsi untuk melihat apa yang terjadi.
David Manners
Saya melakukan panggilan debug setelah $ returnUrl = $ this-> getRequest () -> getParam ('return_url'); dan itu kosong, ada saran.
user9252
1
Saya menggunakan Bitnami, dan menggunakan pengaturan default. Pengaturan default adalah 192.168.1.20:80/magento . Apakah saya menghapus port?
user9252
1
Saya telah menghapus nomor port: 80 dari url dasar. Siram cache. Sekarang diarahkan kembali ke halaman daftar kategori seperti yang direncanakan.
user9252
4

Selain jawaban david-sopan santun, Anda juga mungkin memiliki masalah dengan web/unsecure/base_url& Anda web/secure/base_urldiatur dengan benar tanpa port - tetapi vhost aplikasi Anda yang sebenarnya (apache / nginx) mendengarkan pada beberapa port selain 80/443, misalnya ketika berjalan di belakang pernis.

Ini akan menghasilkan \Mage_Core_Helper_Url::getCurrentUrl, digunakan misalnya untuk menambahkan params kueri pengkodean base64 - diterjemahkan dan digunakan dengan _getRefererUrlmemiliki port 'non-default' sebagai bagian dari url. (mis. http://www.domain.com:81/your-url.html )

Akibatnya Mage_Core_Controller_Varien_Action::_isUrlInternalmengembalikan false ...

Untuk referensi lebih lanjut, lihat
http://erikeng.se/post/magento-behind-varnish.html

Solusi yang bersih dan baik dijelaskan di
/server/318151/how-to-set-php-server-port-var-to-80-behind-varnish

Hartmut
sumber
1

Cobalah untuk mengatur web/unsecure/base_url& web/secure/base_urldengan Anda 127.0.0.1di tempat localhost. Bagi saya itu berhasil.

Fred K
sumber