attributo del prodotto per citare l'articolo e l'articolo dell'ordine


25

Qual è il modo corretto in Magento di mantenere automaticamente un attributo del prodotto per quotare un articolo e infine per ordinare l'articolo?

È semplice come un po 'di configurazione XML o è un processo manuale prima di salvare gli eventi e così via?

Risposte:


21

un modo sarebbe usare un osservatore e un convertitore.

l'osservatore sarebbe quello di ottenere l'attributo dal prodotto al preventivo (usando un attributo chiamato 'test'), e il convertitore ottiene l'attributo dal preventivo all'ordine.

nella tua configurazione:

<global>
    <fieldsets>
        <sales_convert_quote_item>
            <test>
                <to_order_item>*</to_order_item>
            </test>
        </sales_convert_quote_item>
    </fieldsets>

    <sales>
        <quote>
            <item>
                <product_attributes>
                    <test />
                </product_attributes>
            </item>
        </quote>
    </sales>

    <events>
        <sales_quote_item_set_product>
            <observers>
                <YOUR_MODULE>
                    <class>YOUR_MODULE/observer</class>
                    <method>setTestAttribute</method>
                </YOUR_MODULE>
            </observers>
        </sales_quote_item_set_product>
    </events>
</global>

nel tuo osservatore:

public function setTestAttribute(Varien_Event_Observer $observer) {

    $item = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $item->setTest($product->getTest());
    return $this;
}

1
Ben fatto!!!.
Filwinkle

6
Un avvertimento per i futuri googler: elimina manualmente la cartella della cache prima di testarlo. Ho trascorso molte ore a testare molte variazioni su questa risposta, cancellando indici e cache tramite backend. Qualunque cosa abbia fatto, gli attributi personalizzati non sono stati salvati in db, modificando il titolo di quote_item ha funzionato bene. Fino a quando ho cancellato la cache manualmente eliminando / var / cache ... Crazy!
Maurice,

Voglio questo attributo personalizzato nel pannello di backend e accanto a sku nella pagina dei dettagli dell'ordine di vendita. Si prega di suggerire, come realizzare?
Inrsaurabh,

21

Questo viene fatto combinando la tua conoscenza degli osservatori e config.xml. Config.xml gestirà la fornitura di una definizione di attributo personalizzata sull'elemento del preventivo e un osservatore gestirà il salvataggio dell'attributo del prodotto nel preventivo quando aggiunto a un preventivo.

Da lì, usi config.xml per chiamare la definizione di fieldset, che gestirà la conversione da quote_itema order_item.

Divulgazione completa: il contenuto seguente è di Atwix. Link sotto la risposta.

Innanzitutto, è necessario aggiungere l'attributo personalizzato al sales->quote->item->product_attributesnodo:

<sales>
    <quote>
        <item>
            <product_attributes>
                <custom_attribute />
            </product_attributes>
        </item>
    </quote>
</sales>

Questo rende l'attributo accessibile quando lo copieremo dal prodotto per quotare l'articolo, che è il nostro prossimo passo. Per questa attività viene utilizzato l'osservatore e l'evento verrà chiamato sales_quote_item_set_product:

<sales_quote_item_set_product>
    <observers>
        <yourmodule_customattribute>
            <class>yourmodule_customattribute/observer</class>
            <method>salesQuoteItemSetCustomAttribute</method>
        </yourmodule_customattribute>
    </observers>
</sales_quote_item_set_product>

Osservatore:

public function salesQuoteItemSetCustomAttribute($observer)
{
    $quoteItem = $observer->getQuoteItem();
    $product = $observer->getProduct();
    $quoteItem->setCustomAttribute($product->getCustomAttribute());
}

L'ultima cosa di cui dobbiamo preoccuparci: sta convertendo l' attributo da quote_itema order_item. E questo può essere fatto con XML:

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

Fonte: Atwix (che è pieno di vincita): http://www.atwix.com/magento/custom-product-attribute-quote-order-item/


2
+1. Mi sento come se avessi fatto +1 su me stesso. Quando stavo per inviare qualcosa di simile, apparve un messaggio: "questa domanda ha una nuova risposta". quindi +1 perché digiti velocemente :)
Marius

Hahaha - è Atwix, davvero.
Filwinkle,

@philwinkle, Quanto sopra funziona bene, ma supponiamo che l'attributo personalizzato sia punti prodotto a seconda della quantità. Se il prod A ha 50 punti e 2 qtà, allora i punti totali dovrebbero essere 50 * 2 = 100. Come posso impostare il valore 100anziché nell'articolo di 50preventivo? Se il valore dell'attributo viene aggiornato, come posso salvare quel valore aggiornato e non quello impostato
dall'amministratore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.