मात्रा बदलने पर ऑटो अपडेट कार्ट मात्रा


12

मैगेंटो की डिफ़ॉल्ट गाड़ी में, जब ग्राहक मात्रा को संपादित करता है, तो उसे मात्रा अपडेट करने के लिए बटन दबाना होगा।

क्या कोई ऐसा तरीका है जिससे उपयोगकर्ता मात्रा फ़ील्ड में किसी अन्य नंबर को दर्ज करते समय कार्ट स्वचालित रूप से मात्रा को अपडेट करता है?

जवाबों:


14

पहले कार्ट टेम्पलेट को संपादित करें /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlऔर आसान पहुंच के लिए फॉर्म एलिमेंट पर एक आईडी जोड़ें। मान लें कि आप 'id = "कार्ट-फ़ॉर्म" जोड़ते हैं;

अब कार्ट आइटम प्रदान करने वाले टेम्प्लेट संपादित करें:

  • एप्लिकेशन / डिजाइन / दृश्यपटल / {पैकेज} / {विषय} /template/checkout/cart/item/default.phtml
  • एप्लिकेशन / डिजाइन / दृश्यपटल / {पैकेज} / {विषय} /template/downloadable/checkout/cart/item/default.phtml

और <input>नाम cart[<?php echo $_item->getId() ?>][qty]जोड़ने वाले तत्व पर :

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

लेकिन मैं ऐसा करने की सलाह नहीं देता। यह वास्तव में उपयोगकर्ताओं के लिए कष्टप्रद है। (कम से कम मेरे लिए)।


6
उपयोगकर्ता को खुश करता है ?! कोई समस्या नहीं है, हम इसे फिर भी करते हैं: डी
फेबियन ब्लेसश्मिड्ट

5
@FabianBlechschmidt। क्यों नहीं? इसे विकसित करते समय हम नाराज होते हैं, इसका उपयोग करने पर उपयोगकर्ता नाराज होता है। यही समझौता का मतलब है। हर कोई हार जाता है। :)
मारियस

आप कमाल हैं मारियस। मैं अजाक्स का उपयोग कैसे कर सकता हूं?
नवीनबेन

6

मान लें कि आपकी साइट में jQuery नो-संघर्ष मोड में शामिल है, तो यहां अतुल्यकालिक (बहुत कम कष्टप्रद!) करने का एक तरीका है।

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

मुझे यह इंगित करना चाहिए कि यह निम्नलिखित धारणाएँ बनाता है:

  • आपकी खरीदारी कार्ट खरीदारी-कार्ट-टेबल की आईडी के साथ एक तत्व के भीतर रहती है
  • मात्रा के लिए आपके इनपुट फ़ील्ड में एक नाम विशेषता है जो [मात्रा] के साथ समाप्त होती है

अपनी परिस्थितियों से मेल खाने के लिए चयनकर्ताओं को क्रमशः लाइनों 2 और 5 पर कोड में समायोजित करना आसान होना चाहिए।


हाय जेठा मैं यह कोशिश की है, लेकिन यह चेकआउट / कार्ट / अपडेट दिखा रहा है / 302 मिला 1.71 किसी भी विचार क्यों यह इस तरह दिखा रहा है?
नवीनबेन

पैरामीटर्स इस कार्ट हैं [१३ty] [मात्रा] १ गाड़ी [१३ ९] [मात्रा] २ फॉर्म_की zA1lLphVHPsEu4ux इस का उपयोग कर मैं पोस्ट एक्शन को अपडेट करने के लिए इसे कैसे पोस्ट कर सकता हूं
नवेंबोस

क्या आपकी गाड़ी अद्यतन मात्रा दिखाती है?
जेठा चान

यह वास्तव में कुछ भी वापस करने के लिए नहीं है; जब आप इस तरह से करते हैं तो आप वास्तव में रिटर्न वैल्यू की परवाह नहीं करते हैं। सत्यापित करने के लिए चीजें: - क्या आपका फॉर्म सामान्य रूप से AJAX के बिना प्रस्तुत किए जाने पर काम करता है? - जब AJAX का उपयोग करके मानों को बदल दिया जाता है, तो क्या गाड़ी में मान (यानी एक और ब्राउज़र विंडो खोलें) बदल जाते हैं?
जेठा चान


0

इन दो फ़ाइलों को संपादित करें

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

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

और नाम cart[<?php echo $_item->getId() ?>][qty]जोड़ने वाले तत्व पर :

onchange="this.form.submit()"

0

यदि आपका jQuery संस्करण पुराना है, तो आप सफल नहीं होंगे। मुझे एक रास्ता मिल गया है जो इस प्रकार है, डालने के लिए हमारे मित्र मारियस के निर्देशों का पालन करें

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlऔर आसान पहुंच के लिए फार्म तत्व पर एक आईडी जोड़ें। आइए आपको जोड़ते हैंid="cart-form"

अब फ़ाइल खोलें

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

और फ़ाइल के अंत तक स्क्रॉल करें और आपको जावास्क्रिप्ट मिलेगा जो मात्रा का वेतन वृद्धि और गिरावट करता है। फ़ंक्शन इस तरह दिखेगा:

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

इसके लिए बदलें:

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

यदि आपके पास jQuery लोड (अभी तक) नहीं है, तो आप <input> तत्व को भी खोज सकते हैं (या मेरे मामले में एक <select>तत्व जब से मैंने नाम के साथ राशि का चयन करने के लिए एक ड्रॉपडाउन फ़ील्ड बनाया है) name="cart[<?php echo $_item->getId() ?>][qty]"और इसे जोड़ें:

onchange="this.form.submit()"

आपके द्वारा संपादित की जाने वाली phtml फ़ाइल यहां स्थित है:

app/design/frontend/{package}/{theme}/template/checkout/cart/item/default.phtml
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.