使用海关选项更新产品SKU SKUS在产品页面和购物车上
-
16-10-2019 - |
题
当用户选择其自定义选项时,如何在产品页面上的产品页面上动态更新产品的SKU?另外,如何将其传递到购物车页面?
示例:具有SKU XXX的产品具有两个自定义选项Y和Z,它们具有Y1,Y2和Z1,Z2的选项。如果用户选择Y1和Z2,我想将页面上的SKU更改为XXX-Y1-Z2,然后将SKU传递给购物车。
谢谢。
解决方案
如果您在产品中添加自定义选项,则可以添加,例如下拉选项,如下所示。
在将产品添加到购物车并在购物车中取回Sku时选择选项 var_dump($_item->getSku());
您可以看到Sku的产品已更改
现在用于动态更新产品页面上的SKU。为此,我们需要检索可以在文件中完成的选项值SKU app/design/frontend/[package]/[template]/template/catalog/product/view/options.phtml
例如。在这种情况下,在JavaScript之后的第190行周围,我们添加/替换了一些代码,如下所示。 This will give you a javascript array which you can use when a custom option is selected to map the option ID to the SKU suffix and changing the displayed product SKU on the product page.
<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
采用产品,检查自定义选项,然后更改 quote_item
. 。这 quote_item
之后保存,因此无需将其保存在控制器中。
$quoteItem->setSku();
完毕。