2012-09-25 13 views
5

Czy można zmienić właściwości elementu zamówienia po tym, jak zostały dodane do koszyka? (Czy to przez normalne przesyłanie formularzy, czy przez AJAX?)Zmiana właściwości elementu zamówienia na koszyku w Shopify

Próbowałem POST do/cart/change za pomocą klawisza "properties [MyProperty]", ale bez powodzenia. Jest to powiązane z parametrem linii oznaczającym unikalny element zamówienia.

Wszelkie pomysły? Czy to tylko proste "nie"?

+2

mam ten problem. W trakcie pracy usuwam i ponownie dodam element zamówienia za każdym razem ToT; – Ziggy

Odpowiedz

5

Korzystając z interfejsu API Shopify, nie można użyć koszyka/change.js do zmiany właściwości elementu zamówienia. Powodem jest to, że cart/change.js używa "właściwości", aby znaleźć żądany element zamówienia. Dokumentacja API pomija to. Oto przykład:

Kiedy złożyć pocztą do koszyka/add.js z następującymi parametrami url zakodowane:

quantity=9403&id=278440178&properties%5Bmy-property%5D=property%20BAR

Odpowiedź będzie obejmować,

"properties":{"my-property":"property BAR"}

Po przejściu do POST do koszyka/change.js, aby zmienić właściwość z BAR na FOO,

id=278440178&properties%5Bmy-property%5D=property%20FOO

Wtedy odpowiedź będzie obejmować

"properties":{"my-property":"property BAR"}

Oznacza to, że nie byłem w stanie zmienić właściwość elementu zamówienia w ten sposób. Możesz podejrzewać, że dzieje się tak dlatego, że jest jakiś trick dla API koszyka/change.js, ale tak nie jest.

Wskazówki, gdy próbuję usunąć element zamówienia dokonując Posta do koszyka/change.js i określając quantity=0, tak:

quantity=0&id=278440178&properties%5Bmy-property%5D=property%20FOO

Z posesji property FOO jest jednym, że nie należy do dowolnego przedmiotu (mój koszyk ma tylko przedmiot z numerem property BAR), przedmiot nie jest usuwany z koszyka. Jeśli z drugiej strony to zrobić:

POST: quantity=0&id=278440178&properties%5Bmy-property%5D=property%20BAR

Element zostanie usunięty jako normalne.

Wniosek: w koszyku/change.js shopify używa właściwości wiersza elementu w taki sam sposób, w jaki używa "id", czyli znajduje element zamówienia, którego wielkość chcesz zmienić. W taki sam sposób, w jaki nie można użyć koszyka/change.js do zmiany identyfikatora elementu zamówienia, nie można go użyć do zmiany właściwości jednego z nich.

+1

Cieszę się, że w końcu to wymyśliłem. Ta karta była otwarta przez miesiąc! – Ziggy

+0

, jak można zmienić właściwości elementu zamówienia z koszyka? Czy musisz usunąć przedmiot z koszyka i ponownie go dodać? –

+0

Niestety, tak właśnie to zrobiłem. Dołączam POST, aby dodać jako wywołanie zwrotne w wezwaniu do usunięcia. Jest wiele rzeczy, które moglibyśmy chcieć, aby interfejs Shopify API był lepszy ... Może jest nadzieja, może odkryjesz lepszy sposób na zrobienie tego. Jeśli tak, daj mi znać! – Ziggy

0

Możesz zmieniać właściwości elementów zamówienia, wysyłając żądanie POST do "cart/change.js" za pomocą indeksu elementu zamówienia i niektórych usług. zrobiłem coś takiego:

$('.line-item-property__field').on('change', 'input[type="checkbox"]', function() { 
    var $el = $(this), 
     itemIndex = $el.closest('.cart-list__row').data('row'), 
     giftWrap; 

    if ($el.prop('checked')) 
     giftWrap = 'Yes'; 
    else 
     giftWrap = ''; 

    jQuery.ajax({ 
     url: '/cart/change.js', 
     type: 'post', 
     dataType: 'json', 
     data: { line: itemIndex, properties: { 'Gift wrap': giftWrap } }, 
     success: function (data) { 
      console.log(data) 
     }, 
     error: function() { 
      alert(data.description); 
     } 
    }); 
}); 

Jeśli chcesz klucza jakiegoś mienia zmienić, a następnie po prostu usunąć to wartość (zestaw „” lub nieokreślona) i dodać nową właściwość.

Screenshot from Checkout page

Powiązane problemy