Considerando il numero di strutture eCommerce disponibili sul mercato, Magento è una delle scelte più popolari per i negozi di media e grande scala. Sia la sua serie di funzioni che la sua architettura aiutano a distinguerla da molte altre opzioni disponibili oggi.
Sebbene siano disponibili molte estensioni di terze parti per Magento, è anche facile crearne di nuove. Lo scopo di questo tutorial non è quello di spiegare come creare un'estensione personalizzata; tuttavia, presume che tu abbia familiarità con il processo poiché utilizzeremo un modello di progettazione per implementare il nostro modulo personalizzato.
Nello specifico, osserveremo il pattern Event-Observer. Per coloro che non hanno familiarità, gli osservatori si registrano per attendere un evento in modo che possano eseguire il codice ogni volta che viene attivato un evento.
Come accennato, questo tutorial presume che tu abbia dimestichezza con lo sviluppo di moduli personalizzati in Magento, perché creeremo un modulo personalizzato che utilizza quel modello di progettazione.
Innanzitutto, dobbiamo dichiarare l'osservatore per il nostro evento personalizzato. Per fare ciò, inserisci il seguente codice nel file config.xml del tuo modulo appena all'interno dell'elemento globale.
Spiegheremo il codice momentaneamente.
... ... singleton modulename / osservatore my_custom_method
Nel codice sopra, abbiamo appena dichiarato l'osservatore per l'evento chiamato my_custom_event
. Questo significa semplicemente che ogni volta my_custom_event
viene attivato, vedrà che l'osservatore per questo evento è registrato nel modulo e quindi esegue il codice associato all'evento.
Nel nostro caso, chiamerà il metodo my_custom_method
definito nella classe Namespace_Modulename_Model_Observer
.
Ora, facciamo un ulteriore passo avanti. Notare che nel
tag, è possibile definire gli eventi per i quali si desidera registrare gli osservatori. Nel nostro caso, abbiamo registrato l'osservatore per l'evento
. Puoi anche definire più osservatori per lo stesso evento. In tal caso, dichiara tutti i tuoi osservatori all'interno del
etichetta.
Successivamente, ogni osservatore viene avvolto con un identificatore univoco. Nel nostro esempio, lo è
. Inoltre, è necessario specificare il nome della classe e il nome del metodo che verrà eseguito. Il
tag specifica la posizione della classe secondo la convenzione Magento.
Nel nostro esempio, lo sarà Observer.php
sotto il modello
directory di modulename
modulo. Il nome del metodo è dichiarato dal
etichetta. Il valore del
il tag è "singleton", il che significa che utilizzerà la stessa istanza dell'oggetto observer per ogni chiamata di evento.
Ora, dopo aver dichiarato il nostro osservatore, creiamo la classe observer e il relativo codice del metodo. Crea un file Observer.php
sotto il Modello
directory del tuo modulo. Copia e incolla il seguente codice in quel file.
getEvent (); // metodo getter per recuperare il valore cid passato dal dispatcher $ cid = $ event-> getCid (); echo $ cid; Uscita; ?>
Qui, abbiamo appena creato la classe di osservatori. Nel my_custom_method
metodo, avrai accesso all'oggetto observer e ai dati trasmessi insieme al dispatcher in modo che tu possa usarlo per fare qualcosa di significativo.
In questo esempio, abbiamo appena recuperato il valore di cid
variabile passata dal codice del dispatcher che vedremo tra un momento.
Naturalmente, è necessario modificare il modulename
e namespace
in base al modulo personalizzato nel file di classe e nella dichiarazione XML.
Come abbiamo dichiarato l'osservatore nel modulo personalizzato, l'unica cosa che rimane è inviare il nostro evento personalizzato.
Vediamo come puoi usare il dispatcher di eventi di Magento dal tuo modulo personalizzato. Scrivi il seguente codice nel metodo del tuo controllore da dove desideri inviare l'evento. Detto questo, puoi anche licenziare l'evento da altri posti oltre al controller.
'123'); Mage :: dispatchEvent ('my_custom_event', $ event_data_array); ...?>
Come puoi vedere, è abbastanza semplice da spedirel'evento da quasi ovunque in Magento. Il primo argomento del dispatchEvent
metodo è il nome dell'evento e il secondo argomento viene utilizzato per passare i dati agli osservatori.
Come avrete notato in precedenza nella classe observer, abbiamo usato il metodo getter per accedere al valore della variabile cid
.
Nella maggior parte dei casi i dati dell'evento trasmessi agli osservatori sono in modalità di sola lettura. Più in particolare, gli osservatori non possono modificare il valore delle variabili passate dal metodo del dispatcher di eventi.
Supponiamo che tu abbia inviato un evento personalizzato nel tuo modulo e vuoi che gli osservatori siano in grado di modificare i dati degli eventi originali passati. Rivisitiamo il codice del dispatcher per realizzare questo.
'123'); $ varien_object = new Varien_Object ($ event_data_array); Mage :: dispatchEvent ('my_custom_event', array ('varien_obj' => $ varien_object)); // dovrebbe produrre '456' dato che cambieremo il valore in observer echo $ varien_object-> getCid (); ...?>
Abbiamo appena usato l'oggetto speciale di Magento Varien_Object
e abbiamo passato i nostri dati usando quello per assicurarci che qualsiasi modifica ai dati sia preservata.
Dovrai anche modificare di conseguenza il codice della classe osservatore. Ecco la classe osservatore modificata.
getEvent (); // metodo getter per recuperare vari oggetti passati dal dispatcher $ varien_object = $ event-> getVarienObj (); $ Varien_object-> setCid ( '456'); ?>
L'unica modifica importante nel codice è il recupero del file varien
oggetto e usando quello per cambiare il valore della variabile di matrice cid
.
Anche se questo è un tutorial relativamente semplice, mostra come possiamo facilmente implementare il pattern Event-Observer nel contesto di un modulo personalizzato Magento. A questo punto, dovresti avere familiarità con la creazione di moduli personalizzati utilizzando il pattern Event-Observer.
Non esitare a lasciare domande e / o commenti nel modulo sottostante!