Автоматичне оновлення кількості кошика при зміні кількості


12

У кошику Magento за замовчуванням, коли клієнт редагує кількість, йому потрібно натиснути кнопку, щоб оновити кількість.

Чи існує спосіб, коли візок автоматично оновлює кількість, коли користувач вводить інше число в полі кількості?

Відповіді:


14

Спочатку відредагуйте шаблон кошика /app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlта додайте ідентифікатор у елемент форми для легшого доступу. Скажімо, ви додаєте 'id = "cart-form"';

Тепер відредагуйте шаблони, які відображають елементи кошика:

  • app / design / frontend / {пакет} / {тема} /template/checkout/cart/item/default.phtml
  • app / design / frontend / {пакет} / {тема} /template/downloadable/checkout/cart/item/default.phtml

а на <input>елементі з назвою cart[<?php echo $_item->getId() ?>][qty]додайте це:

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

Але я не рекомендую цього робити. Це дійсно дратує користувачів. (принаймні для мене).


6
Дратує користувача ?! Без проблем, ми все-таки це робимо: D
Fabian Blechschmidt

5
@FabianBlechschmidt. Чому ні? Ми дратуємось при його розробці, користувач дратується при його використанні. Ось що означає компроміс. Усі програють. :)
Маріус

Ти чудовий Маріус. як я можу це зробити за допомогою 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 Я спробував це, але він показує замовлення / кошик / updatePost / 302 Знайдено 1.71s будь-яка ідея, чому це показує так?
Naveenbos

Параметри цього кошика [137] [кількість] 1 кошик [139] [кількість] 2 form_key zA1lLphVHPsEu4ux Використовуючи це, як я можу опублікувати це для оновлення дії після публікації
Naveenbos

Чи показує ваш кошик оновлені кількості?
Jetha Chan

Це насправді не означає нічого повернути; більше до того, що ви насправді не повинні піклуватися про повернену вартість, коли ви робите це таким чином. Слід перевірити: - чи працює форма, коли вона надсилається нормально, тобто без AJAX? - коли значення змінюються за допомогою AJAX, чи змінюються значення у кошику (тобто відкрити інше вікно браузера)?
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 стара, вам не вдасться. Я знайшов такий спосіб, як дотримуватися вказівок нашого друга Маріуса

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtmlі додайте ідентифікатор в елемент форми для полегшення доступу. Скажімо, ви додаєтеid="cart-form"

Тепер відкрийте файл

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

І прокрутіть до кінця файлу, і ви знайдете javascript, який робить збільшення та зменшення кількості. Функція буде виглядати приблизно так:

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.