Pregunta

¿Cómo puedo actualizar dinámicamente el SKU de un producto en la página del producto cuando los usuarios seleccionan sus opciones personalizadas? Además, ¿cómo podría pasar a la página del carrito?

Ejemplo: un producto con SKU XXX tiene dos opciones personalizadas Y y Z, que tienen las opciones de Y1, Y2 y Z1, Z2. Si un usuario selecciona Y1 y Z2, me gustaría cambiar el SKU en la página a XXX-Y1-Z2 y pasar ese SKU al carrito.

Gracias.

¿Fue útil?

Solución

Si agrega opciones personalizadas a un producto que puede agregar, por ejemplo, para opciones desplegables, un sufijo SKU del producto como se muestra a continuación.

enter image description here

Al elegir una opción al agregar el producto al carrito y recuperar el SKU en el carrito var_dump($_item->getSku()); puedes ver los productos que Sku ha sido cambiado

enter image description here

Ahora para actualizar dinámicamente la SKU en la página del producto. Para esto, necesitaremos recuperar los valores de opción SKU que se pueden hacer en el archivo app/design/frontend/[package]/[template]/template/catalog/product/view/options.phtml por ejemplo. En este caso, alrededor de la línea 190 después del JavaScript, agregamos/reemplazamos algún código como se muestra a continuación. Esto le dará una matriz de JavaScript que puede usar cuando se selecciona una opción personalizada para asignar la ID de opción al sufijo SKU y cambiar el SKU del producto que se muestra en la página del producto.

<dl>
    <?php $options_to_sku = array();?>

    <?php foreach($_options as $_option): ?>
        <?php echo $this->getOptionHtml($_option) ?>
<?php
if ($_option->getType() == 'drop_down')
{
    $options_to_sku["{$_option->getId()}"] = array();
    foreach ($_option->getValues() as $k => $v) 
    {
        $options_to_sku["{$_option->getId()}"]["{$v->getData('option_type_id')}"] = $v->getData('sku');
    }
}
?>
    <?php endforeach; ?>
    </dl>
    <script type="text/javascript">
        var options_to_sku = <?php echo json_encode($options_to_sku);?>;

        $$('.product-custom-option').each(function(elm) {
            $(elm).observe('change', function() {
                var sku_suffix = '';
                $$('.product-custom-option').each(function(opt) {
                    if ($(opt).value.length==0) // no value selected
                        return;

                    var opt_id = $(opt).readAttribute('id').replace('select_','');

                    if (!!!options_to_sku[opt_id]) // no option values array found
                        return;

                    if (!!!options_to_sku[opt_id][$(opt).value]) // no sku found matching value id
                        return;

                    sku_suffix += '-' + options_to_sku[opt_id][$(opt).value]; // add to suffix
                });

                /**
                 * add here the code that adds the suffix to your SKU
                 */
                console.log(sku_suffix);
            });
        });
    </script>

Otros consejos

Página del producto

Agregue el SKU a la página del producto, agregue algunas líneas de JS, escuche change sobre el <select> y cambia el sku.

Carro

Implementar un observador, escuchar checkout_cart_product_add_after Tome el producto, verifique las opciones personalizadas y cambie el SKU del quote_item. los quote_item se guarda después, por lo que no es necesario guardarlo dentro del controlador.

$quoteItem->setSku();

Hecho.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top