Miktarı değiştirirken araba miktarını otomatik güncelle


12

Magento'nun varsayılan sepetinde, müşteri miktarı düzenlediğinde, miktarı güncellemek için düğmeye basması gerekir.

Kullanıcı miktar alanına başka bir sayı girdiğinde sepetin miktarı otomatik olarak güncellemesinin bir yolu var mı?

Yanıtlar:


14

Önce alışveriş sepeti şablonunu düzenleyin ve /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmldaha kolay erişim için form öğesine bir kimlik ekleyin. Diyelim ki 'id = "cart-form"';

Şimdi alışveriş sepeti öğelerini oluşturan şablonları düzenleyin:

  • Uygulamanın / tasarım / kullanıcı arayüzü / {paket} / {tema} /template/checkout/cart/item/default.phtml
  • Uygulamanın / tasarım / kullanıcı arayüzü / {paket} / {tema} /template/downloadable/checkout/cart/item/default.phtml

ve <input>şu isme sahip öğeye şunu cart[<?php echo $_item->getId() ?>][qty]ekleyin:

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

Ama bunu yapmanızı önermiyorum. Kullanıcılar için gerçekten can sıkıcı. (en azından benim için).


6
Kullanıcıyı kızdırır mı ?! Sorun değil, yine de yapıyoruz: D
Fabian Blechschmidt

5
@FabianBlechschmidt. Neden olmasın? Biz geliştirirken rahatsız, kullanıcı onu kullanırken rahatsız. Uzlaşmanın anlamı budur. Herkes kaybeder. :)
Marius

Harikasın Marius. Ajax kullanarak bunu nasıl yapabilirim?
Naveenbos

6

Sitenizde çakışma yok modunda jQuery bulunduğunu varsayarsak, bunu eşzamansız olarak yapmanın bir yolu (çok daha az can sıkıcı!).

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

Bunun aşağıdaki varsayımları yaptığına dikkat çekmeliyim:

  • Alışveriş sepetiniz, alışveriş sepeti tablosu kimliğine sahip bir öğe içinde yaşıyor
  • Miktar için giriş alanlarınızın [qty] ile biten bir ad özelliği var

2. ve 5. satırlardaki koddaki seçicileri durumunuza göre ayarlamak kolay olmalıdır.


Merhaba Jetha Bunu denedim ama ödeme / sepeti / updatePost / 302 bulundu 1.71s neden böyle gösteriyor herhangi bir fikir?
Naveenbos

Parametreler bu alışveriş sepetidir [137] [adet] 1 sepet [139] [adet] 2 form_key zA1lLphVHPsEu4ux Bunu kullanarak post
action'ı

Sepetinizde güncellenen miktarlar görünüyor mu?
Jetha Chan

Aslında bir şey döndürmek anlamına gelmiyor; daha çok bu şekilde yaptığınızda dönüş değeri ile ilgilenmek istemediğiniz nokta. Doğrulanacaklar: - formunuz normal olarak gönderildiğinde, yani AJAX olmadan çalışıyor mu? - değerler AJAX kullanılarak değiştirildiğinde, alışveriş sepetindeki değerler değişiyor mu (başka bir tarayıcı penceresi aç)?
Jetha Chan


0

Bu iki dosyayı düzenle

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

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

ve şu isme sahip öğeye şunu cart[<?php echo $_item->getId() ?>][qty]ekleyin:

onchange="this.form.submit()"

0

JQuery sürümünüz eskiyse başarılı olmazsınız. Aşağıdaki gibi bir yol buldum, dostumuz Marius'un ekleme talimatlarını takip edin

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlve daha kolay erişim için form öğesine bir kimlik ekleyin. Diyelim ki ekledinizid="cart-form"

Şimdi dosyayı aç

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

Ve dosyanın sonuna kaydırın ve miktarın artışını ve azalmasını yapan javascript'i bulacaksınız. İşlev şu şekilde görünecektir:

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

Bunun için değişiklik:

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

0

Yüklü (henüz) jQuery yoksa, aynı zamanda adı ile <input> öğeyi (ya da benim durumumda bir <select>öğe oluşturmak için bir açılır alan oluşturduğum için) bulabilirsiniz name="cart[<?php echo $_item->getId() ?>][qty]"ve bunu ekleyin:

onchange="this.form.submit()"

Düzenlemek zorunda olduğunuz phtml dosyası burada bulunur:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.