Création d'option personnalisée et un prix au produit juste ajouté au panier en utilisant observateur
-
16-10-2019 - |
Question
Je veux ajouter l'option personnalisée à l'aide quoteitem observateur auquel cas de checkoutCartProductAddAfter d'observateurs et les incendies après produit ajouté au panier.
public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
$item = $observer->getQuoteItem();
$item->addOption(new Varien_Object(
array(
'product' => $item->getProduct(),
'label' => 'Free Gifts',
'value' => 'Spend $50 and get gift product worth $9.99'
)
));
return;
}
Mon observateur travail mais je ne suis pas en mesure d'ajouter l'option personnalisée au produit ajouté. s'il vous plaît fournir une aide à ajouter l'option personnalisée à l'aide observateur au produit ajouté juste.
La solution
a prononcé un discours @ Tim sur cette question le week-end: https: / /docs.google.com/presentation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7ZEJhm9jE/edit
Qu'est-ce que vous voulez est Méthode 2: Ajouter l'événement à la suite Config.xml
<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>
Dans Observer.php ajouter suivant la méthode
public function salesQuoteAddressCollectTotalsBefore($observer)
{
$quote = $observer->getQuote();
$quote_items = $quote->getItemsCollection();
foreach ($quote_items as $item) {
$additionalOptions = array(
array(
'code' => 'my_code',
'label' => 'This text is displayed through additional options',
'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
)
);
$item->addOption(
array(
'code' => 'additional_options',
'value' => serialize($additionalOptions),
)
);
}
}
Voici plus sur ce sujet:
et plus:
Autres conseils
L'événement d'ajouter des options correspond le personnalisées à la volée est catalog_product_type_prepare_full_options
, qui est déclenché juste avant le produit avec ses options personnalisées est converti en un élément de citation.
au cas où les propres données de buyRequest ont un effet sur les attributs de produit ou d'options, un observateur sur le
catalog_product_type_prepare_{$processMode}_options
d'événement est un bon choix, où$processMode
est le mode de validation et peut être « complète » ou « lite ». Le mode « full » est utilisé lorsqu'un produit est régulièrement ajouté au panier et valide si toutes les options nécessaires sont définies et toute la configuration est valide. Dans le mode « lite » seules options contenues dans la demande sont validées, il est utilisé lors de l'ajout d'un produit à la liste, mais aussi possible lors de la création d'un ordre du back-end. Pour traiter les données dans tous les cas, vous pouvez enregistrer l'observateur pour les deux événements. En cas de validation, vous devez différencier les événements de cours.Les événements sont déclenchés dans Mage_Catalog_Model_Product_Type_Abstract :: _ prepareOptions () et les paramètres suivants sont disponibles:
transport
: objet de transport pour toutes les options personnalisées (mais pas d'autres options, par exemple les options bundle), de sorte que vous pouvez les changer à l'observateur. Transport-> Options est un tableau sous forme option_id => option_value. Attention, le transport lui-même est un objet stdClass, pas une instance de Varien_Object, comme on pouvait s'y attendre. Donc, il n'y a pas de méthodes getter et setter pour transport-> Options.buy_request
. L'objet buyRequest, vous pouvez le lire ici et modifier encore aussi bienproduct
: Le produit qui sera converti en un élément de citation plus tard. Ici, vous pouvez manipuler les attributs ou les ajouter dynamiquement. Mais vous avez encore besoin de les considérer dans le processus de conversion. L'événement utilisé pour cela,sales_quote_product_add_after
, est déclenchée plus tard seulement.
Source: La Magento buyRequest Object - Référence
Ainsi, un observateur pourrait ressembler à ceci:
public function addCustomOption(Varien_Event_Observer $observer)
{
$transport = $observer->getTransport();
if (this_item_should_be_free()) { // implement your condition here
$transport->options['Free Gifts'] = 'Spend $50 and get gift product worth $9.99';
}
}
Vous ne pouvez pas définir un prix pour cette option personnalisée dynamiquement ajoutée, mais vous pouvez changer le prix de l'élément de citation à l'aide d'un second observateur catalog_product_get_final_price
comme ceci:
public function adjustFinalPrice($observer) {
$product = $observer->getProduct();
// Set price to "0" if custom option "Free Gift" has been set
if ($product->getCustomOption('Free Gift')) {
$product->setFinalPrice(0);
}
}