Aggiornamento Prodotto Codice con le opzioni doganali SKU sulle pagine dei prodotti e della spesa
-
16-10-2019 - |
Domanda
Come posso aggiornare dinamicamente la SKU di un prodotto sulla pagina del prodotto quando gli utenti selezionano le sue opzioni personalizzate? Inoltre, come potrebbe quindi essere passato nella pagina del carrello?
Esempio: Un prodotto con SKU XXX ha due opzioni personalizzate Y e Z, che hanno le opzioni di Y1, Y2 e Z1, Z2. Se un utente seleziona Y1 e Z2, mi piacerebbe cambiare lo sku sulla pagina per XXX-Y1-Z2 e passare che sku al carrello.
Grazie.
Soluzione
Se si aggiunge un opzioni personalizzate a un prodotto è possibile aggiungere, ad esempio per le opzioni a discesa, un prodotto SKU suffisso come illustrato di seguito.
Su scegliendo un'opzione quando si aggiunge il prodotto al carrello e il recupero della SKU nel carrello var_dump($_item->getSku());
è possibile vedere i prodotti SKU è stata modificata ??p>
Ora, per aggiornare in modo dinamico la SKU sulla pagina del prodotto. Per questo abbiamo bisogno di recuperare i valori SKU che può essere fatto nel file app/design/frontend/[package]/[template]/template/catalog/product/view/options.phtml
ad esempio di opzione. In questo caso attorno alla riga 190 dopo il javascript aggiungiamo / sostituire il codice come illustrato di seguito. Questo vi darà un array JavaScript che può essere utilizzato quando un opzione personalizzata è selezionata per mappare l'ID opzione per il suffisso SKU e la modifica del prodotto esposto SKU sulla pagina del prodotto.
<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>
Altri suggerimenti
Scheda Prodotto
Aggiungi lo sku alla pagina del prodotto, aggiungere un paio di righe di JS, ascolto sulla change
sul <select>
e cambiare lo sku.
Carrello
Implementare un osservatore, ascoltare checkout_cart_product_add_after
prendere il prodotto, controllare le opzioni personalizzate e cambiare lo sku del quote_item
. Il quote_item
viene salvata in seguito, quindi non è necessario salvarlo all'interno del controller.
$quoteItem->setSku();
Fatto.