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.

Était-ce utile?

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:

https: // stackoverflow .com / questions / 9334115 / magento à changement-option valeur personnalisée avant ajoutée-it-cart / 9344336 # 9344336

et plus:

https: // stackoverflow .com / questions / 9412074 / magento-devis-commande-produit-élément-attribut basé sur l'utilisateur-entrée / 9496266 # 9496266

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 bien
  •   
  • product: 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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top