Aggiorna automaticamente la quantità del carrello quando si cambia quantità


12

Nel carrello predefinito di Magento, quando il cliente modifica la quantità, deve premere il pulsante per aggiornare la quantità.

C'è un modo in cui il carrello aggiorna automaticamente la quantità quando l'utente inserisce un altro numero nel campo quantità?

Risposte:


14

In primo luogo modificare il modello di spesa /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmle aggiungere un id sull'elemento modulo per facilitare l'accesso. Diciamo che aggiungi 'id = "cart-form"';

Ora modifica i modelli che rendono gli articoli del carrello:

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

e <input>sull'elemento con il nome cart[<?php echo $_item->getId() ?>][qty]aggiungi questo:

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

Ma non consiglio di farlo. È davvero fastidioso per gli utenti. (almeno per me).


6
Infastidisce l'utente ?! Nessun problema, lo facciamo comunque: D
Fabian Blechschmidt l'

5
@FabianBlechschmidt. Perchè no? Siamo infastiditi durante lo sviluppo, l'utente è infastidito quando lo utilizza. Questo è ciò che significa compromesso. Tutti perdono. :)
Marius

Sei fantastico Marius. come posso fare questo usando Ajax?
Naveenbos,

6

Supponendo che il tuo sito abbia jQuery incluso in modalità senza conflitti, ecco un modo per farlo in modo asincrono (molto meno fastidioso!).

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

Vorrei sottolineare che ciò fa le seguenti ipotesi:

  • Il tuo carrello della spesa vive all'interno di un elemento con l'id del carrello della spesa
  • I campi di input per la quantità hanno un attributo name che termina con [qty]

Dovrebbe essere facile regolare i selettori nel codice rispettivamente nelle righe 2 e 5 in base alle circostanze.


Ciao Jetha Ho provato questo, ma sta mostrando il checkout / cart / updatePost / 302 Trovato 1.71 hai idea del perché sta mostrando in questo modo?
Naveenbos il

I parametri sono questo carrello [137] [qtà] 1 carrello [139] [qtà] 2 form_key zA1lLphVHPsEu4ux Usando questo come posso postare questo per aggiornare post azione
Naveenbos

Il tuo carrello mostra le quantità aggiornate?
Jetha Chan,

In realtà non è destinato a restituire nulla; più al punto che non si intende davvero preoccuparsi del valore di ritorno quando lo si fa in questo modo. Cose da verificare: - il modulo funziona quando viene inviato normalmente, ovvero senza AJAX? - quando i valori vengono cambiati usando AJAX, cambiano i valori nel carrello (cioè aprite un'altra finestra del browser)?
Jetha Chan,


0

Modifica questi due file

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

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

e sull'elemento con il nome cart[<?php echo $_item->getId() ?>][qty]aggiungi questo:

onchange="this.form.submit()"

0

Se la tua versione di jQuery è vecchia, non ci riuscirai. Ho trovato un modo che è il seguente, segui le istruzioni del nostro amico Marius da inserire

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmle aggiungi un ID sull'elemento del modulo per un accesso più semplice. Diciamo che aggiungiid="cart-form"

Ora apri il file

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

E scorri fino alla fine del file e troverai il javascript che esegue l'incremento e il decremento della quantità. La funzione sarà simile a questa:

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

Cambia per questo:

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

Se non hai caricato (ancora) jQuery, puoi anche trovare l' <input> elemento (o nel mio caso un <select>elemento da quando ho creato un campo a discesa per selezionare l'importo) con il nome name="cart[<?php echo $_item->getId() ?>][qty]"e aggiungere questo:

onchange="this.form.submit()"

Il file phtml che devi modificare si trova qui:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.