수량 변경시 카트 수량 자동 업데이트


12

Magento의 기본 장바구니에서 고객이 수량을 편집 할 때 버튼을 눌러 수량을 업데이트해야합니다.

사용자가 수량 필드에 다른 번호를 입력 할 때 장바구니가 수량을 자동으로 업데이트하는 방법이 있습니까?

답변:


14

먼저 장바구니 템플릿을 수정하고 /app/design/frontend/{package}/{theme}/template/checkout/cart.phtml더 쉽게 액세스 할 수 있도록 양식 요소에 ID를 추가하십시오. 'id = "cart-form"'을 추가한다고 가정 해 보겠습니다.

카트 항목을 렌더링하는 템플릿을 편집하십시오.

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

<input>이름 cart[<?php echo $_item->getId() ?>][qty]이 있는 요소에 다음을 추가하십시오.

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

그러나 나는 이것을하지 않는 것이 좋습니다. 사용자에게는 정말 성가신 일입니다. (적어도 나에게는).


6
사용자를 귀찮게합니까?! 문제 없음, 우리는 그럼에도 불구하고 그것을 : D
파비안 Blechschmidt

5
아리따움 왜 안돼? 우리는 그것을 개발할 때 화가 났고, 그것을 사용할 때 사용자가 화가났습니다. 그것이 타협의 의미입니다. 모두가집니다. :)
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()
            });
        }
    );
});

나는 이것이 다음과 같은 가정을한다는 것을 지적해야한다.

  • 귀하의 쇼핑 카트는 shopping-cart-table ID를 가진 요소 내에 있습니다
  • 수량에 대한 입력 필드 에는 [qty]로 끝나는 이름 속성이 있습니다 .

상황에 맞게 2 행과 5 행의 코드에서 선택기를 쉽게 조정할 수 있어야합니다.


안녕하세요 Jetha 나는 이것을 시도했지만 checkout / cart / updatePost / 302 Found 1.71s가 왜 이런 식으로 보이는지 알 수 있습니까?
Naveenbos

매개 변수는이 카트입니다 [137] [qty] 1 cart [139] [qty] 2 form_key zA1lLphVHPsEu4ux 이것을 사용하여 포스트 액션을 업데이트하기 위해 이것을 어떻게 게시 할 수
있습니까

장바구니에 업데이트 된 수량이 표시됩니까?
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 버전이 오래된 경우 성공하지 못합니다. 나는 친구 Marius의 지시에 따라 다음과 같은 방법을 찾았습니다.

/app/design/frontend/{package}/{theme}/template/checkout/cart.phtml더 쉽게 액세스 할 수 있도록 양식 요소에 ID를 추가하십시오. 추가한다고 가정 해 봅시다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.