Automatische Aktualisierung der Wagenmenge, wenn die Menge geändert wird


12

Wenn der Kunde im Standardkorb von Magento die Menge bearbeitet, muss er die Taste drücken, um die Menge zu aktualisieren.

Gibt es eine Möglichkeit, dass der Warenkorb die Menge automatisch aktualisiert, wenn der Benutzer eine andere Zahl in das Mengenfeld eingibt?

Antworten:


14

Bearbeiten Sie zuerst die Warenkorbvorlage /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlund fügen Sie dem Formularelement eine ID hinzu, um den Zugriff zu erleichtern. Angenommen, Sie fügen 'id = "cart-form"' hinzu.

Bearbeiten Sie nun die Vorlagen, mit denen die Warenkorbelemente gerendert werden:

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

und füge auf dem <input>Element mit dem Namen folgendes cart[<?php echo $_item->getId() ?>][qty]hinzu:

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

Aber ich empfehle das nicht. Es ist wirklich ärgerlich für die Benutzer. (zumindest für mich).


6
Ärgert der User ?! Kein Problem, wir machen es trotzdem: D
Fabian Blechschmidt

5
@FabianBlechschmidt. Warum nicht? Wir sind verärgert, wenn wir es entwickeln, der Benutzer ist verärgert, wenn er es verwendet. Das bedeutet Kompromiss. Jeder verliert. :)
Marius

Du bist großartig Marius. Wie kann ich das mit Ajax machen?
Naveenbos

6

Angenommen, Ihre Site verfügt über jQuery im No-Conflict-Modus. Hier ist eine Möglichkeit, dies asynchron zu tun (viel weniger ärgerlich!).

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

Ich möchte darauf hinweisen, dass dies folgende Annahmen voraussetzt:

  • Ihr Einkaufswagen befindet sich in einem Element mit der ID " shopping-cart-table"
  • Ihre Eingabefelder für die Menge haben ein Namensattribut , das mit [Menge] endet.

Es sollte einfach sein, die Selektoren im Code in Zeile 2 bzw. 5 an Ihre Umstände anzupassen.


Hallo Jetha, ich habe es versucht, aber es zeigt die Kasse / cart / updatePost / 302 Gefunden 1,71s eine Idee, warum es so angezeigt wird?
Naveenbos

Parameter sind dieser Wagen [137] [Menge] 1 Wagen [139] [Menge] 2 form_key zA1lLphVHPsEu4ux So kann ich dies posten, um die Aktion zu aktualisieren
Naveenbos 29.12.15

Zeigt Ihr Warenkorb die aktualisierten Mengen an?
Jetha Chan

Es ist eigentlich nicht dazu gedacht, etwas zurückzugeben. mehr bis zu dem Punkt, dass Sie sich nicht wirklich um den Rückgabewert kümmern sollen, wenn Sie dies auf diese Weise tun. Zu überprüfende Punkte: - Funktioniert Ihr Formular bei normaler Übermittlung, dh ohne AJAX? - Wenn die Werte mit AJAX geändert werden, ändern sich die Werte im Einkaufswagen (dh öffnen Sie ein anderes Browserfenster)?
Jetha Chan


0

Bearbeiten Sie diese beiden Dateien

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

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

und cart[<?php echo $_item->getId() ?>][qty]füge auf dem Element mit dem Namen folgendes hinzu:

onchange="this.form.submit()"

0

Wenn Ihre jQuery-Version alt ist, ist dies nicht erfolgreich. Ich habe einen Weg gefunden, der wie folgt ist: Folgen Sie den Anweisungen unseres Freundes Marius, um sie einzufügen

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlund fügen Sie dem Formularelement eine ID hinzu, um den Zugriff zu erleichtern. Nehmen wir an, Sie fügen hinzuid="cart-form"

Jetzt Datei öffnen

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

Scrollen Sie zum Ende der Datei und Sie werden das Javascript finden, das das Inkrementieren und Dekrementieren der Menge vornimmt. Die Funktion sieht folgendermaßen aus:

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

Ändern Sie dafür:

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

Falls Sie jQuery (noch) nicht geladen haben, können Sie auch das <input> Element (oder in meinem Fall ein <select>Element, da ich ein Dropdown-Feld zur Auswahl des Betrags erstellt habe) mit dem Namen suchen und Folgendes name="cart[<?php echo $_item->getId() ?>][qty]"hinzufügen:

onchange="this.form.submit()"

Die zu bearbeitende HTML-Datei befindet sich hier:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.