อัพเดทปริมาณรถเข็นอัตโนมัติเมื่อเปลี่ยนปริมาณ


12

ในรถเข็นเริ่มต้นของ Magento เมื่อลูกค้าแก้ไขปริมาณเขา / เธอต้องกดปุ่มเพื่ออัพเดทปริมาณ

มีวิธีใดที่รถเข็นจะอัปเดตปริมาณโดยอัตโนมัติเมื่อผู้ใช้ป้อนหมายเลขอื่นในฟิลด์ปริมาณหรือไม่

คำตอบ:


14

ขั้นแรกแก้ไขเทมเพลตรถเข็น/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlและเพิ่มรหัสในองค์ประกอบของฟอร์มเพื่อให้เข้าถึงได้ง่ายขึ้น สมมติว่าคุณเพิ่ม 'id = "รูปแบบรถเข็น"';

ตอนนี้แก้ไขเทมเพลตที่แสดงรายการรถเข็น:

  • app / ออกแบบ / ส่วนหน้า / แพคเกจ {} / {} ธีม /template/checkout/cart/item/default.phtml
  • app / ออกแบบ / ส่วนหน้า / แพคเกจ {} / {} ธีม /template/downloadable/checkout/cart/item/default.phtml

และใน<input>องค์ประกอบที่มีชื่อcart[<?php echo $_item->getId() ?>][qty]เพิ่มสิ่งนี้:

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

แต่ฉันไม่แนะนำให้ทำเช่นนี้ มันน่ารำคาญจริงๆสำหรับผู้ใช้ (อย่างน้อยสำหรับฉัน)


6
รบกวนผู้ใช้! ไม่มีปัญหาเราทำมัน: D
Fabian Blechschmidt

5
@FabianBlechschmidt ทำไมจะไม่ล่ะ? เรารำคาญเมื่อทำการพัฒนาผู้ใช้จะรำคาญเมื่อใช้ นั่นคือสิ่งที่หมายถึงการประนีประนอม ทุกคนแพ้ :)
Marius

คุณเป็น Marius ที่ยอดเยี่ยม ฉันจะทำสิ่งนี้โดยใช้ Ajax ได้อย่างไร
Naveenbos

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

ฉันควรชี้ให้เห็นว่าสิ่งนี้ทำให้สมมติฐานดังต่อไปนี้:

  • ตะกร้าสินค้าของคุณใช้ชีวิตอยู่ภายในองค์ประกอบที่มีรหัสของตะกร้าสินค้า
  • ช่องป้อนข้อมูลของคุณสำหรับปริมาณมีแอตทริบิวต์ชื่อที่ลงท้ายด้วย[qty]

ควรปรับตัวเลือกในรหัสบนบรรทัดที่ 2 และ 5 ได้ง่ายเพื่อให้เหมาะกับสถานการณ์ของคุณ


สวัสดี Jetha ฉันได้ลองแล้ว แต่มันแสดงเช็คเอาต์ / รถเข็น / อัปเดต / 302 พบ 1.71s ความคิดใด ๆ ที่ทำให้มันแสดงเช่นนี้?
Naveenbos

พารามิเตอร์เป็นรถเข็นนี้ [137] [จำนวน] 1 รถเข็น [139] [จำนวน] 2 form_key zA1lLphVHPsEu4ux การใช้สิ่งนี้ฉันจะโพสต์สิ่งนี้เพื่ออัปเดตการดำเนินการของโพสต์ได้อย่างไร
Naveenbos

รถเข็นของคุณแสดงปริมาณที่อัพเดทหรือไม่?
Jetha Chan

มันไม่ได้หมายถึงการคืนสิ่งใดจริง ๆ มากขึ้นจนถึงจุดที่คุณไม่ได้ตั้งใจจะดูแลเกี่ยวกับค่าตอบแทนเมื่อคุณทำเช่นนี้ สิ่งที่ต้องตรวจสอบ: - ฟอร์มของคุณทำงานเมื่อส่งตามปกติคือไม่มี AJAX หรือไม่ - เมื่อมีการเปลี่ยนแปลงค่าโดยใช้ AJAX ค่าในรถเข็น (เช่นเปิดหน้าต่างเบราว์เซอร์อื่น) เปลี่ยนไปหรือไม่
Jetha Chan

1
ขอให้เรายังคงอภิปรายนี้ในการแชท
Jetha Chan

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 ของคุณเก่าคุณจะไม่ประสบความสำเร็จ ฉันได้พบวิธีที่ดังต่อไปนี้ปฏิบัติตามคำแนะนำของเพื่อน Marius ที่จะแทรก

/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.