Automatyczna aktualizacja ilości koszyka przy zmianie ilości

12

W domyślnym koszyku Magento, gdy klient edytuje ilość, musi nacisnąć przycisk, aby zaktualizować ilość.

Czy istnieje sposób, aby koszyk automatycznie aktualizował ilość, gdy użytkownik wprowadzi inny numer w polu ilości?

JGeer
źródło

Odpowiedzi:

14

Najpierw edytuj szablon koszyka /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmli dodaj identyfikator w elemencie formularza, aby ułatwić dostęp. Powiedzmy, że dodajesz „id =" cart-form "';

Teraz edytuj szablony renderujące elementy koszyka:

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

i na <input>elemencie o nazwie cart[<?php echo $_item->getId() ?>][qty]dodaj to:

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

Ale nie polecam tego robić. To naprawdę denerwujące dla użytkowników. (przynajmniej dla mnie).

Marius
źródło
6
Drażni użytkownika ?! Nie ma problemu, robimy to jednak: D
Fabian Blechschmidt
5
@FabianBlechschmidt. Dlaczego nie? Jesteśmy zirytowani przy jego opracowywaniu, użytkownik jest zirytowany podczas korzystania z niego. To właśnie oznacza kompromis. Wszyscy przegrywają. :)
Marius
Jesteś niesamowity Marius. jak mogę to zrobić za pomocą Ajax?
Naveenbos
6

Zakładając, że twoja strona ma jQuery w trybie bez konfliktów, oto sposób na zrobienie tego asynchronicznie (znacznie mniej irytująco!).

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

Powinienem zaznaczyć, że przyjmuje to następujące założenia:

  • Twój koszyk żyje w elemencie o identyfikatorze tabela zakupów
  • Twoje pola wejściowe dla ilości mają atrybut nazwy, który kończy się na [ilość]

Należy łatwo ustawić selektory w kodzie odpowiednio w wierszach 2 i 5, aby dopasować je do okoliczności.

Jetha Chan
źródło
Cześć Jetha Próbowałem tego, ale pokazuje kasę / koszyk / aktualizacjęPost / 302 Znaleziono 1.71s jakiś pomysł, dlaczego tak to pokazuje?
Naveenbos
Parametry to ten koszyk [137] [szt.] 1 koszyk [139] [szt.] 2 form_key zA1lLphVHPsEu4ux Używając tego, jak mogę to opublikować, aby zaktualizować post działanie
Naveenbos
Czy Twój koszyk pokazuje zaktualizowane ilości?
Jetha Chan
W rzeczywistości nie ma to na celu zwrotu; bardziej do tego stopnia, że ​​tak naprawdę nie zależy ci na wartości zwracanej, gdy robisz to w ten sposób. Rzeczy do zweryfikowania: - czy Twój formularz działa, gdy jest przesyłany normalnie, tj. Bez AJAX? - czy wartości zmieniane za pomocą AJAX zmieniają się w koszyku (tj. otwierają inne okno przeglądarki)?
Jetha Chan,
1
Daj nam kontynuować tę dyskusję w czacie .
Jetha Chan
0

Edytuj te dwa pliki

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

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

i na elemencie o nazwie cart[<?php echo $_item->getId() ?>][qty]dodaj to:

onchange="this.form.submit()"
snh_nl
źródło
0

Jeśli twoja wersja jQuery jest stara, nie odniesiesz sukcesu. Znalazłem sposób, który jest następujący: postępuj zgodnie z instrukcjami naszego przyjaciela Mariusa, aby wstawić

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmli dodaj identyfikator do elementu formularza, aby ułatwić dostęp. Powiedzmy, że dodajeszid="cart-form"

Teraz otwórz plik

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

I przewiń do końca pliku, a znajdziesz javascript, który zwiększa i zmniejsza ilość. Funkcja będzie wyglądać następująco:

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

Zmień na to:

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
źródło
0

W przypadku, gdy nie masz jeszcze załadowanego jQuery, możesz również znaleźć <input> element (lub w moim przypadku <select>element, ponieważ zbudowałem pole rozwijane, aby wybrać kwotę) z nazwą name="cart[<?php echo $_item->getId() ?>][qty]"i dodać to:

onchange="this.form.submit()"

Plik phtml, który musisz edytować, znajduje się tutaj:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
TheFrakes
źródło