Estoy desarrollando un módulo de venta cruzada que mostrará productos en el carrito que puede agregar al carrito haciendo clic en el botón Agregar al carrito. Necesito tener en cuenta las variantes del producto (atributos).
Ya descubrí cómo agregar el botón Agregar al carrito a la página del carrito gracias a este código:
<form action="{$urls.pages.cart}" method="post" id="add-to-cart-or-refresh"> <input type="hidden" name="token" value="{$static_token}"> <input type="hidden" name="id_product" value="{$product->id}" id="product_page_product_id"> <span class="remove-from-cart"> <button class="btn btn-primary add-to-cart" data-button-action="add-to-cart" type="submit" {if (!$product->checkQty(1))} disabled {/if}> <i class="material-icons float-xs-left">shopping_cart</i> {ls="Add to cart" d='Shop.Theme.Actions'} </button> </span> </form>
Pero lo que necesito ahora es actualizar el precio de visualización según el valor elegido con el menú desplegable de valor de opción de selección establecido como en la página de mi producto y usar la identificación de atributo seleccionada para que cuando el usuario haga clic en el botón Agregar al carrito, agregue para cargar el producto con el atributo bueno y no el predeterminado
Estoy seguro de que es del script js que se actualiza el precio, pero realmente no averiguo qué función se encarga de esto.
Esta es la opción de selección como se le preguntó
<div class="clearfix product-variants-item"> <span class="control-label">ATTRIBUTE_GROUP_NAME</span> <select class="form-control form-control-select" id="group_ATTRIBUTE_GROUP_ID" data-product-attribute="ATTRIBUTE_GROUP_ID" name="group[ATTRIBUTE_GROUP_ID]"> <option value="ATTRIBUTE_ID" title="ATTRIBUTE_NAME" selected="selected">ATTRIBUTE_NAME</option> </select> </div>
la solución no es muy simple pero se puede lograr, de la misma manera que prestashop funciona en la página del producto, debe actualizar su contenido con ajax en el cambio de atributo. Desarrollamos un módulo complejo de ventas adicionales al finalizar la compra utilizando el mismo método y funciona bien. Los pasos lógicos son:
-> Se cambia el valor seleccionado
-> enviar los datos a través de ajax
-> obtenga los datos nuevos y actualizados, la mejor opción para mí es volver a mostrar la vista de su módulo y obtener un html como respuesta
-> reemplace su contenido con el nuevo html
Otra forma, no probada porque, en mi opinión, es un poco más compleja, podría ser almacenar en javascript todos los datos sobre todas las variaciones/combinaciones y manejar la lógica allí para obtener los datos de precios que necesita en cada cambio. Un problema con esta solución es que los datos no siempre pueden actualizarse porque se almacenan localmente.
Espero que mi sugerencia ayude, quería comentar, pero mi clasificación aún es demasiado baja y tengo que responder en su lugar.
simone