J'ai configuré une option personnalisée pour mon produit à Magento comme Dropdown I.e. P>
Taille: petit, moyen, grand p>
sur la page du produit I Affichez des informations supplémentaires pour chaque option à l'aide de JavaScript. P>
Petite taille 30, poitrine 36, longueur 42 ...
Moyen - taille 32, coffre 38, longueur 44 ...
Grand - taille 34, poitrine 40, longueur 48 ... p>
Quand j'ajouterai le produit au panier, j'ai le titre de taille (petit, moyen ou grand) dans le panier, mais je souhaite également montrer cette information supplémentaire (taille 30, coffre 36, longueur 42 ...) et obtenez-la sauvegardée avec ordre. p>
Quelle est la meilleure façon de le faire? Merci d'avance. P>
3 Réponses :
aller à admin -> catalogue -> attributs -> gérer les attributs code>. Localisez votre attribut de la liste. Dans votre cas, c'est probablement
taille code>. Cliquez dessus et accédez à
Gérer les étiquettes / Options CODE>. De là, vous pouvez ajouter les informations supplémentaires à chaque valeur. Vous pouvez changer l'étiquette en "Petite taille 30, la poitrine 36, la longueur 42" et la répétition pour chaque valeur d'attribut que vous souhaitez modifier. p>
Sean, merci pour la réponse mais ce n'est pas l'attribut, c'est l'option personnalisée. Malheureusement, je ne peux pas suivre cette méthode car il y a aussi un journal d'autres problèmes impliqués. Si vous pouvez me guider pour modifier de manière problématique la valeur de l'option personnalisée, elle facilitera ma vie beaucoup plus facile.
Les options personnalisées ne sont stockées que sur la citation comme des identifiants d'option et des valeurs. Chaque fois que les options sont rendues, elles sont essentiellement rechargées de la base de données.
Si vous modifiez les valeurs, vous devez les sauvegarder, et cela les définirait pour tout le monde.
Cela dit, je travaille autour de la question en ajoutant une option personnalisée supplémentaire avec la valeur modifiée à la volée, en utilisant un observateur d'événement. Pour cela, j'utilise des options supplémentaires.
Ensuite, je supprimai l'option personnalisée originale de l'élément de devis. p>
jusqu'à 1.4 Magento a pris soin du reste, mais depuis lors, vous devez copier les options supplémentaires à l'article de commande manuellement et que vous devez également prendre soin de vous définir si un élément est réorganisé. p>
Voici donc un exemple de configuration d'observateur. P>
/** * Add additional options to order item product options (this is missing in the core) * * @param Varien_Event_Observer $observer */ public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer) { $quoteItem = $observer->getItem(); if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) { $orderItem = $observer->getOrderItem(); $options = $orderItem->getProductOptions(); $options['additional_options'] = unserialize($additionalOptions->getValue()); $orderItem->setProductOptions($options); } } /** * Manipulate the custom product options * * @param Varien_Event_Observer $observer * @return void */ public function checkoutCartProductAddAfter(Varien_Event_Observer $observer) { $item = $observer->getQuoteItem(); $infoArr = array(); if ($info = $item->getProduct()->getCustomOption('info_buyRequest')) { $infoArr = unserialize($info->getValue()); } // Set additional options in case of a reorder if ($infoArr && isset($infoArr['additional_options'])) { // An additional options array is set on the buy request - this is a reorder $item->addOption(array( 'code' => 'additional_options', 'value' => serialize($infoArr['additional_options']) )); return; } $options = Mage::helper('catalog/product_configuration')->getCustomOptions($item); foreach ($options as $option) { // The only way to identify a custom option without // hardcoding ID's is the label :-( // But manipulating options this way is hackish anyway if ('Size' === $option['label']) { $optId = $option['option_id']; // Add replacement custom option with modified value $additionalOptions = array(array( 'code' => 'my_code', 'label' => $option['label'], 'value' => $option['value'] . ' YOUR EXTRA TEXT', 'print_value' => $option['print_value'] . ' YOUR EXTRA TEXT', )); $item->addOption(array( 'code' => 'additional_options', 'value' => serialize($additionalOptions), )); // Update info_buyRequest to reflect changes if ($infoArr && isset($infoArr['options']) && isset($infoArr['options'][$optId])) { // Remove real custom option unset($infoArr['options'][$optId]); // Add replacement additional option for reorder (see above) $infoArr['additional_options'] = $additionalOptions; $info->setValue(serialize($infoArr)); $item->addOption($info); } // Remove real custom option id from option_ids list if ($optionIdsOption = $item->getProduct()->getCustomOption('option_ids')) { $optionIds = explode(',', $optionIdsOption->getValue()); if (false !== ($idx = array_search($optId, $optionIds))) { unset($optionIds[$idx]); $optionIdsOption->setValue(implode(',', $optionIds)); $item->addOption($optionIdsOption); } } // Remove real custom option $item->removeOption('option_' . $optId); } }
Merci Vinaii pour l'aide. Je vais essayer ceci.
Voici une autre réponse basée sur cette approche avec une petite torsion différente et plus de détails: Stackoverflow.com/a/9496266/485589
Aide-t-il si je suis en train de définir une option d'addition dans sales_quote_collect_totals_before. Parce que ma vente_convert_quote_item_to_order_item il n'appelle pas. tous
@Vinay: Comment il est possible pour la liste de souhaits? Lorsque l'utilisateur cliquez sur Ajouter à la liste de souhaits, comment nous affichons ces options supplémentaires sur la liste de souhaits
Je suis implémenté cela sur Magento 2 afin que je puisse pouvoir modifier les valeurs d'option personnalisées et que les modifications sont reflétées sur la page de panier, mais lorsque j'ai été suivi de Sales_Convert_quote_item_to_order_item Observer sur Magento2, les modifications ne sont pas reflétées sur la page de commande.
Juste pour ajouter une petite solution à la grande solution de Vinaii. La solution brise la logique d'obtenir un élément de devis par produit.
La fonction getItembyProduct de Mage_Sales_Model_Quote_Item appelle la fonction Représenter le produit qui se compare entre la citation et les options de produit. Si les deux objets ont une liste identique des options, il renvoie l'objet de devis sinon false. P>
Parce que les deux objets ont des options différentes maintenant que nous avons ajouté notre option personnalisée la fonction retournera false. P>
un. façon de résoudre ce problème est de réécrire MAGE_SALES_MODEL_QUETE_ITEM CLASS
et ajoutez votre code d'option personnalisé à la variable locale $ _NotreResentoptions dans le constructeur. p>
Enregistrez-vous ces données supplémentaires en quelque sorte? Lorsque vous vérifiez l'administrateur pour la commande, la taille, la poitrine, la longueur, etc. apparaît-elle?
Désolé, si je n'avais pas assez clair. Je viens de montrer ces informations si JavaScript est codé dur dans le fichier PHTML. Par exemple, si (Val == petit) puis montrer la taille 30, la poitrine 36, la longueur 42 ... Maintenant, je veux ajouter ces informations supplémentaires à la commande afin qu'elle soit stockée pour chaque article.