Обновить продукт SKU с помощью таможенных опций SKU на страницах продукта и корзины

magento.stackexchange https://magento.stackexchange.com/questions/11578

Вопрос

Как я могу динамически обновить SKU продукта на странице продукта, когда пользователи выбирают его пользовательские параметры? Кроме того, как его можно было передавать на страницу корзины?

Пример: продукт с SKU XXX имеет два пользовательских параметра Y и Z, которые имеют параметры Y1, Y2 и Z1, Z2. Если пользователь выбирает Y1 и Z2, я бы хотел изменить SKU на странице на XXX-Y1-Z2 и передать этот SKU на корзину.

Спасибо.

Это было полезно?

Решение

Если вы добавите пользовательские параметры в продукт, который вы можете добавить, например, для параметров выпадения, продукт SKU суффикс, как показано ниже.

enter image description here

При выборе опции при добавлении продукта в корзину и получении SKU в корзину var_dump($_item->getSku()); Вы можете увидеть, что продукты были изменены

enter image description here

Теперь для динамического обновления SKU на странице продукта. Для этого нам нужно будет получить значения опции SKU, которые можно сделать в файле app/design/frontend/[package]/[template]/template/catalog/product/view/options.phtml Например. В этом случае около строки 190 после JavaScript мы добавляем/заменяем какой -то код, как показано ниже. Это даст вам массив JavaScript, который вы можете использовать при выборе пользовательской опции для составления отображения идентификатора опции на суффикс SKU и изменение отображаемого продукта SKU на странице продукта.

<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>

Другие советы

Страница продукта

Добавьте SKU на страницу продукта, добавьте несколько строк JS, прослушайте change на <select> и изменить Sku.

Тележка

Внедрить наблюдателя, слушать checkout_cart_product_add_after Возьмите продукт, проверьте пользовательские параметры и измените SKU quote_item. Анкет А quote_item впоследствии сохраняется, поэтому не нужно сохранять его внутри контроллера.

$quoteItem->setSku();

Сделанный.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top