Perbarui kuantitas keranjang secara otomatis saat mengubah kuantitas

12

Dalam kereta default Magento, ketika pelanggan mengedit kuantitas, dia harus menekan tombol untuk memperbarui kuantitas.

Apakah ada cara agar keranjang memperbarui kuantitas secara otomatis ketika pengguna memasukkan nomor lain di bidang kuantitas?

JGeer
sumber

Jawaban:

14

Pertama-tama edit templat keranjang /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmldan tambahkan id pada elemen formulir untuk akses yang lebih mudah. Katakanlah Anda menambahkan 'id = "cart-form"';

Sekarang edit templat yang membuat item keranjang:

  • app / design / frontend / {package} / {theme} /template/checkout/cart/item/default.phtml
  • app / design / frontend / {package} / {theme} /template/downloadable/checkout/cart/item/default.phtml

dan pada <input>elemen dengan nama cart[<?php echo $_item->getId() ?>][qty]tambahkan ini:

onchange="$('cart-form').submit()"

Tapi saya tidak menyarankan melakukan ini. Benar-benar menyebalkan bagi pengguna. (setidaknya untuk saya).

Marius
sumber
6
Mengganggu pengguna ?! Tidak masalah, kami tetap melakukannya: D
Fabian Blechschmidt
5
@FabianBlechschmidt. Kenapa tidak? Kami kesal saat mengembangkannya, pengguna kesal saat menggunakannya. Itulah arti kompromi. Semua orang kalah. :)
Marius
Anda adalah Marius yang luar biasa. bagaimana saya bisa melakukan ini menggunakan Ajax?
Naveenbos
6

Dengan asumsi situs Anda memiliki jQuery yang termasuk dalam mode tanpa konflik, berikut adalah cara melakukannya secara tidak sinkron (apalagi menjengkelkan!).

jQuery(document).ready(function(){
jQuery('#shopping-cart-table')
    .on(
        'change',
        'input[name$="[qty]"]',
        function(){
            var form = jQuery(jQuery(this).closest('form'));

            // we'll extract the action and method attributes out of the form

            // kick off an ajax request using the form's action and method,
            // with the form data as payload
            jQuery.ajax({
                url: form.attr('action'),
                method: form.attr('method'),
                data: form.serializeArray()
            });
        }
    );
});

Saya harus menunjukkan bahwa ini membuat asumsi berikut:

  • Keranjang belanja Anda hidup dalam elemen dengan id tabel shopping cart
  • Kolom input Anda untuk kuantitas memiliki atribut nama yang diakhiri dengan [qty]

Seharusnya mudah untuk menyesuaikan pemilih dalam kode pada baris 2 dan 5 masing-masing agar sesuai dengan keadaan Anda.

Jetha Chan
sumber
Hai Jetha Saya sudah mencoba ini tetapi ini menunjukkan kasir / keranjang / updatePost / 302 Ditemukan 1.71 ada ide mengapa itu ditampilkan seperti ini?
Naveenbos
Parameternya adalah troli ini [137] [qty] 1 troli [139] [qty] 2 form_key zA1lLphVHPsEu4ux Menggunakan ini bagaimana saya bisa memposting ini untuk memperbarui tindakan posting
Naveenbos
Apakah keranjang Anda menunjukkan jumlah yang diperbarui?
Jetha Chan
Itu sebenarnya tidak dimaksudkan untuk mengembalikan apa pun; lebih tepatnya Anda tidak benar-benar dimaksudkan untuk peduli dengan nilai pengembalian ketika Anda melakukannya dengan cara ini. Hal-hal yang perlu diverifikasi: - apakah formulir Anda berfungsi ketika dikirimkan secara normal, yaitu tanpa AJAX? - ketika nilai diubah menggunakan AJAX, apakah nilai dalam keranjang (mis. buka jendela browser lain) berubah?
Jetha Chan
1
Mari kita lanjutkan diskusi ini dalam obrolan .
Jetha Chan
0

Edit dua file ini

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml

app/design/frontend/{package}/{theme}/template/downloadable/checkout/cart/item/default.phtml

dan pada elemen dengan nama cart[<?php echo $_item->getId() ?>][qty]tambahkan ini:

onchange="this.form.submit()"
snh_nl
sumber
0

Jika versi jQuery Anda sudah tua, Anda tidak akan berhasil. Saya telah menemukan cara yaitu sebagai berikut, ikuti instruksi teman kita Marius untuk memasukkan

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmldan menambahkan id pada elemen formulir untuk akses yang lebih mudah. Katakanlah Anda menambahkanid="cart-form"

Sekarang buka file

app/design/frontend/{package}/{theme}/template/downloadable/checkout/cart/item/default.phtml

Dan gulir ke akhir file dan Anda akan menemukan javascript yang melakukan penambahan dan penurunan kuantitas. Fungsi akan terlihat seperti ini:

function plusQty(itemId){
    qty = $('qty'+itemId).value;
    qty = parseInt(qty);        
    qty++;
    $('qty'+itemId).value = qty;
}

function minusQty(itemId){
    qty = $('qty'+itemId).value;
    qty = parseInt(qty);        
    if(qty>0){
        qty--;
        $('qty'+itemId).value = qty;
    }
}

Ubah untuk ini:

function plusQty(itemId){
    qty = $('qty'+itemId).value;
    qty = parseInt(qty);        
    qty++;
    $('qty'+itemId).value = qty;
    document.getElementById("cart-form").submit();  
}

function minusQty(itemId){
    qty = $('qty'+itemId).value;
    qty = parseInt(qty);

    if(qty>0){
        qty--;
        $('qty'+itemId).value = qty;
         document.getElementById("cart-form").submit();   
    }
}
Lucas Julio Silveira
sumber
0

Jika Anda belum memuat jQuery (belum), Anda juga dapat menemukan <input> elemen (atau dalam kasus saya <select>elemen sejak saya membuat bidang dropdown untuk memilih jumlahnya) dengan nama name="cart[<?php echo $_item->getId() ?>][qty]"dan menambahkan ini:

onchange="this.form.submit()"

File phtml yang harus Anda edit ada di sini:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
TheFrakes
sumber