2012-09-25 10 views
5

¿Es posible cambiar las propiedades de los artículos de línea después de que se hayan agregado al carrito? (¿O a través de un envío de formulario normal, o a través de AJAX?)Cambiar las propiedades de los artículos de línea en el carrito en Shopify

He intentado un POST para/carro/cambiar con una clave de "propiedades [MyProperty]", pero no tuve suerte hasta el momento. Esto se combina con el parámetro de línea para indicar el artículo de línea único.

¿Alguna idea? ¿O es solo un "no" directo?

+2

estoy teniendo este problema a. Como solución alternativa, elimino y vuelvo a agregar el elemento de línea cada vez que ToT; – Ziggy

Respuesta

5

Al utilizar la API de Shopify, no puede usar cart/change.js para cambiar las propiedades de una línea de pedido. La razón es que cart/change.js usa 'propiedades' para encontrar la línea de pedido que desea. La documentación API omite esto. Aquí está un ejemplo:

Cuando hago un POST al carrito de compra/add.js con los siguientes parámetros de URL codificada:

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

La respuesta incluirá,

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

Cuando continúo para hacer una POST en cart/change.js para cambiar la propiedad de BAR a FOO,

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

A continuación, la respuesta incluirá,

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

Es decir, yo era incapaz de cambiar la propiedad del elemento de línea de esta manera. Puede sospechar que esto se deba a que hay algún truco en la API carrito/change.js, pero este no es el caso.

Aviso, cuando intento para eliminar un elemento de línea al incluir un anuncio al carrito de compra/change.js y especificando quantity=0, así:

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

Con la propiedad property FOO ser uno que no pertenece a cualquier artículo (mi carrito solo tiene un artículo con property BAR en este momento), el artículo no se elimina del carrito. Si por el contrario lo hago:

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

El elemento se elimina de forma normal.

Conclusión: en cart/change.js, shopify utiliza las propiedades del elemento de línea de la misma forma que usa 'id', es decir, para encontrar la línea cuya cantidad desea cambiar. De la misma manera que no puede usar cart/change.js para cambiar la identificación de una línea de pedido, no puede usarla para cambiar las propiedades de una.

+1

Estoy tan contento de haber descubierto esto. ¡He tenido esta pestaña abierta por un mes! – Ziggy

+0

Entonces, ¿cómo cambiar las propiedades de un artículo de línea del carro? ¿Tienes que quitar la cosa del carro y volver a agregarla? –

+0

Lamentablemente, así fue como terminé haciéndolo. Incluyo la POST para agregar como una devolución de llamada en la llamada para eliminar. Hay muchas cosas que podríamos desear para que la API de Shopify lo haga mejor ... Tal vez haya esperanza, tal vez descubra una forma mejor de hacerlo. ¡Si lo haces, asegúrate de avisarme! – Ziggy

0

Puede cambiar las propiedades de las líneas de pedido enviando la solicitud POST a 'cart/change.js' con el índice de la línea de pedido y algunas propiedades. he hecho algo como esto:

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

Si desea cambiar la clave de alguna propiedad, a continuación, basta con retirar su valor (conjunto "" o indefinido) y añadir una nueva propiedad.

Screenshot from Checkout page

Cuestiones relacionadas