製品ページとカートの税関オプションSKUを備えた製品SKUを更新する
-
16-10-2019 - |
質問
ユーザーがカスタムオプションを選択したときに、製品ページの製品のSKUを動的に更新するにはどうすればよいですか?また、どのようにしてカートページに渡すことができますか?
例:SKU XXXの製品には、Y1、Y2およびZ1、Z2のオプションがある2つのカスタムオプションYとZがあります。ユーザーが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行目の場合は、以下に示すようにコードを追加/交換します。これにより、オプションIDをSKUサフィックスにマップし、製品ページで表示された製品SKUを変更するためにカスタムオプションを選択したときに使用できるJavaScriptアレイが提供されます。
<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();
終わり。