Обновить продукт SKU с помощью таможенных опций SKU на страницах продукта и корзины
-
16-10-2019 - |
Вопрос
Как я могу динамически обновить SKU продукта на странице продукта, когда пользователи выбирают его пользовательские параметры? Кроме того, как его можно было передавать на страницу корзины?
Пример: продукт с SKU XXX имеет два пользовательских параметра Y и Z, которые имеют параметры Y1, Y2 и Z1, Z2. Если пользователь выбирает Y1 и Z2, я бы хотел изменить SKU на странице на XXX-Y1-Z2 и передать этот SKU на корзину.
Спасибо.
Решение
Если вы добавите пользовательские параметры в продукт, который вы можете добавить, например, для параметров выпадения, продукт SKU суффикс, как показано ниже.
При выборе опции при добавлении продукта в корзину и получении SKU в корзину var_dump($_item->getSku());
Вы можете увидеть, что продукты были изменены
Теперь для динамического обновления 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();
Сделанный.