Domanda

sto cercando di iniettare funzionalità in caso catalog_model_product_duplicate. Parte di questo modulo sarà quello di garantire che la condizione di riserva del prodotto duplicato è duplicato anche; Al momento non è così.

vedo che CatalogInventory osserva questo evento e set di un po 'di informazioni di borsa standard. Mi si può garantire che gli eventi di base sono risolti davanti ai miei locali? C'è un ordine delle operazioni qui che posso contare su?

È stato utile?

Soluzione

L'ordine in cui gli eventi vengono inviati in dipende dall'ordine in cui sono caricati i moduli. Dal momento che si ha bisogno per essere sicuri che il modulo CatalogInventory osservatori fuoco prima vostro fa, quello che dovete fare è semplicemente configurare il modulo dipendono dal modulo Mage_CatalogInventory. Si può fare questo con l'aggiunta di un nodo dipende al codice nel file app/etc/modules/My_Module.xml:

<config>
    <modules>
        <My_Module>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_CatalogInventory />
            </depends>
        </My_Module>
    </modules>
</config>

Il nodo depends nel XML sopra è il pezzo cruciale di configurazione qui, in quanto costringe il modulo principale Magento carico prima vostro.

Altri suggerimenti

L'ordine in cui vengono spediti gli eventi non può essere facilmente garantita. Sono dipende dall'ordine in cui sono caricati i moduli. In genere tutti gli osservatori degli eventi principali saranno chiamati prima di comunità e osservatori piscina codice locale.

C'è un metodo per osservatori forza Magento a fuoco dopo uno personalizzato da "finta" una dipendenza di un modulo di base per un locale o di una comunità. Date un'occhiata alla risposta di Lee qui: Fare un osservatore personalizzato il fuoco prima di un esistente Magento osservatore .

/app/etc/modules/Groupname_Page.xml

<config>
    <modules>
        <Groupname_Page>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <!-- Your dependencies go here -->
            </depends>
        </Groupname_Page>
        <Enterprise_PageCache>
            <depends>
                <Groupname_Page />
            </depends>
        </Enterprise_PageCache>
    </modules>
</config>

Io personalmente non mi piace questo approccio, come non so quali conseguenze forzatura che la dipendenza avrebbero.

Per il vostro caso d'uso, sembra che si dovrebbe fare una sorta di rilevare i dati / stato di sapere se sia stato licenziato o meno. Verifica un data / stato su un modello sarebbe preferibile che cercare di forzare un ordine evento.

Una risposta generale

osservatori vengono eseguite Area , poi da ordine di caricamento modulo

Ciò significa che, vengono eseguiti tutti gli osservatori registrati in <global> prima tutti gli osservatori registrati in <frontend> o <adminhtml>.

All'interno dell'area, osservatori vengono eseguiti nell'ordine in cui compaiono nella struttura di configurazione XML risultante dalla fusione, i quali mezzi tecnicamente nell'ordine sono stati caricati i moduli.

Modulo ordine di caricamento viene determinato come segue:

  1. Un grafico dipendenza viene costruito dalle definizioni <depends> in app/etc/modules/*.xml. Se X dipende Y, Y viene caricato prima X.

  2. Dopo l'ordinazione da dipendenza, moduli di base hanno precedenza su comunità e moduli locali

  3. Tutto il resto viene caricato in ordine alfabetico. Si noti che il nome del file in app/etc/modules viene utilizzato per il confronto, non il nome del modulo attuale.

Quindi, avete due opzioni per ordine di caricamento del modulo influenza:

  1. dipendere da un altro modulo per avere i vostri osservatori eseguito dopo essere (o fare l'altro modulo dipenderà il vostro da averli eseguite prima)
  2. Rinominare il file di definizione del modulo. Non è necessario rinominare il modulo stesso, perché il nome del file non importa di qualcosa di diverso ordine di caricamento.

( "3. Aggiungere il modulo alla piscina codice di base" non conta)

Vedi anche:

Solo un suggerimento, osservare sia catalog_model_product_duplicate e catalog_model_product_save_after con osservatore Singleton. In catalog_model_product_duplicate dati di inventario insieme come dati osservatori, e in uso catalog_model_product_save_after che i dati per l'inventario popolano per il prodotto duplicato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top