Creazione di opzione Personalizzata e il premio al prodotto appena aggiunto al carrello utilizzando osservatore

magento.stackexchange https://magento.stackexchange.com/questions/1327

Domanda

Voglio aggiungere un'opzione personalizzata per quoteitem utilizzando osservatore quale evento osservatore checkoutCartProductAddAfter e incendi dopo che il prodotto aggiunto al carrello.

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;

}

Il mio osservatore è lavoro ma io non sono in grado di aggiungere l'opzione personalizzata per prodotto aggiunto. si prega di fornire aiuto per aggiungere l'opzione personalizzata utilizzando osservatore al prodotto appena aggiunto.

È stato utile?

Soluzione

@ Tim ha tenuto un discorso su questo problema durante il fine settimana: https: / /docs.google.com/presentation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7ZEJhm9jE/edit

Quello che vuoi è Metodo 2: Aggiungi seguente evento nel 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>

In Observer.php add seguente Metodo

   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),
                )
            );
        }
    }

Ecco più su questo argomento:

https: // StackOverflow .com / domande / 9334115 / Magento-cambio-custom-opzione-valore-prima-di aggiungere-it-to-cart / 9344336 # 9344336

e di più:

https: // StackOverflow .com / domande / 9412074 / Magento-quote-fine-prodotto-oggetto-attributo-based-on-user-input / 9496266 # 9496266

Altri suggerimenti

L'evento appropriata per aggiungere opzioni personalizzate al volo è catalog_product_type_prepare_full_options, che viene attivato appena prima che il prodotto con le sue opzioni personalizzate viene convertito in un elemento preventivo.

Qualora i propri dati buyRequest hanno effetto sulle caratteristiche dei prodotti o le opzioni, un osservatore sulla catalog_product_type_prepare_{$processMode}_options evento è una buona scelta, dove $processMode è la modalità di convalida e può essere “pieno” o “light”. La modalità “full” viene utilizzato quando un prodotto viene regolarmente aggiunto al carrello e convalida, se tutte le opzioni necessarie sono impostate e l'intera configurazione è valida. Nella modalità “lite” uniche opzioni contenute nella richiesta vengono convalidati, viene utilizzato quando si aggiunge un prodotto al lista dei desideri, ma anche possibile durante la creazione di un ordine del back-end. Per elaborare i dati in ogni caso è possibile registrare l'osservatore per entrambi gli eventi. Dovrebbe esserci la convalida si dovrebbe differenziare gli eventi del corso.

Gli eventi si verificano in Mage_Catalog_Model_Product_Type_Abstract :: _ prepareOptions () ed i seguenti parametri sono disponibili:

  • transport: oggetto di trasporto per tutte le opzioni personalizzate (ma non le altre opzioni, ad esempio per le opzioni di bundle), in modo da poterli modificare nell'osservatore. transport-> Opzioni è un array nella forma option_id => option_value. Attenzione, il trasporto è di per sé un oggetto stdClass, non un'istanza di Varien_Object, come ci si potrebbe aspettare. Quindi non esistono metodi getter e setter per Transport-> opzioni.
  • buy_request:. L'oggetto buyRequest, si può leggere qui e ancora modificarlo così
  • product: Il prodotto che verrà convertito in un elemento di citazione in seguito. Qui è possibile manipolare gli attributi o aggiungerli in modo dinamico. Ma è ancora necessario prendere in considerazione nel processo di conversione. L'evento utilizzato per questo, sales_quote_product_add_after, viene attivato in seguito solo.

Fonte: Il Magento buyRequest Object - Un riferimento

Quindi, un osservatore potrebbe essere simile a questo:

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';
    }
}

Non è possibile impostare un prezzo per questa opzione personalizzato aggiunto in modo dinamico, ma è possibile modificare il prezzo dell'articolo citazione utilizzando un secondo osservatore per catalog_product_get_final_price in questo modo:

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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top