Evenimente personalizate în Magento cu modelul de observator

Având în vedere numărul de cadre de eCommerce disponibile pe piață, Magento este una dintre cele mai populare alegeri pentru magazinele mijlocii la scară largă. Atât setul său de caracteristici, cât și arhitectura acestuia ajută la diferențierea de multe dintre celelalte opțiuni disponibile astăzi.

Cu toate că există o mulțime de extensii pentru terțe părți pentru Magento disponibile, este de asemenea ușor să vă dezvoltați propriul. Scopul acestui tutorial nu este de a trece prin cum să creați o extensie personalizată; cu toate acestea, presupune că sunteți familiarizat cu procesul, deoarece vom folosi un model de proiectare pentru a implementa propriul modul personalizat.

În mod specific, vom examina modelul Eveniment-Observer. Pentru cei care nu sunt familiarizați, observatorii se înregistrează pentru a aștepta un eveniment pentru a putea executa codul ori de câte ori un eveniment este dat. 

Așa cum am menționat, acest tutorial presupune că sunteți familiarizat cu modul de a dezvolta module personalizate în Magento, deoarece vom crea un modul personalizat care folosește modelul de design.

Configurarea observatorului

În primul rând, trebuie să declarăm observatorul pentru evenimentul nostru personalizat. Pentru aceasta, introduceți următorul cod în fișierul config.xml din modulul dvs., chiar în interiorul elementului global.

Vom explica codul momentan.

...     Singleton modulename / observator my_custom_method    ... 

În codul de mai sus, tocmai am declarat observatorul evenimentului numit my_custom_event. Acest lucru înseamnă pur și simplu că ori de câte ori my_custom_event este concediat, se va vedea că observatorul pentru acest eveniment este înregistrat în modulul dvs. și apoi execută codul asociat evenimentului. 

În cazul nostru, se va numi metoda my_custom_method definite în clasă Namespace_Modulename_Model_Observer.

Acum, hai să facem un pas mai departe. Observați că în puteți defini evenimentele pentru care doriți să înregistrați observatorii. În cazul nostru, am înregistrat observatorul pentru eveniment . De asemenea, puteți defini mai mulți observatori pentru același eveniment. În acest caz, declarați toți observatorii în interiorul etichetă.

Apoi, fiecare observator este înfășurat cu un identificator unic. În exemplul nostru, este . Mai mult, trebuie să specificați numele clasei și numele metodei care va fi executată.  tag-ul specifică locația clasei conform convenției Magento. 

În exemplul nostru, va fi Observer.php sub model directorul companiei modulename modul. Numele metodei este declarat de către  etichetă. Valoarea lui tag-ul este "singleton", ceea ce înseamnă că va folosi aceeași instanță a obiectului observatorului pentru fiecare apel al unui eveniment.

Acum, după declararea observatorului nostru, să creăm clasa de observație și codul de metodă asociat. Creați un fișier Observer.php sub Model directorului modulului dvs. Copiați și inserați următorul cod în acel fișier.

getEvent (); // metoda getter pentru a prelua valoarea cid transferată de la expeditor $ cid = $ event-> getCid (); echo $ cid; Ieșire; ?>

Aici, tocmai am creat clasa de observatori. În my_custom_method , veți avea acces la obiectul observator și la datele transmise împreună cu acesta de la dispecer, astfel încât să îl puteți folosi pentru a face ceva semnificativ. 

În acest exemplu, tocmai am atras valoarea cid variabila trecută de la codul dispecerului pe care îl vom vedea într-un moment.

Desigur, trebuie să modificați modulename și Spațiu de nume în funcție de modul dvs. personalizat în fișierul de clasă și declarația XML.

Trimiteți evenimentul personalizat

După cum am declarat observatorul în modulul personalizat, singurul lucru rămas este să trimitem evenimentul nostru personalizat. 

Să vedem cum puteți utiliza expeditorul evenimentului Magento din modulul dvs. personalizat. Scrieți următorul cod în metoda controlerului de unde doriți să expediați evenimentul. După ce ați spus acest lucru, puteți declanșa evenimentul și din alte locuri în afară de controlor.

 '123'); Mage :: dispatchEvent ('my_custom_event', $ event_data_array); ...?> 

După cum puteți vedea că este destul de simplu să trimitețievenimentul de aproape oriunde în Magento. Primul argument al dispatchEvent metoda este numele evenimentului, iar al doilea argument este folosit pentru a transmite datele observatorilor.

Așa cum ați observat mai devreme în clasa de observatori, am folosit metoda getter pentru a accesa valoarea variabilei cid.

În cele mai multe cazuri, datele evenimentului transmise observatorilor sunt în modul "numai citire". Mai exact, observatorii nu pot schimba valoarea variabilelor transmise prin metoda dispecerului evenimentului.

Acordarea accesului la scriere

Să presupunem că ați expediat un eveniment personalizat în modulul dvs. și doriți ca observatorii să poată modifica datele originale ale evenimentului. Să revedem codul dispecerului pentru a realiza acest lucru.

 '123'); $ varien_object = nou Variable_Object ($ event_data_array); Mage :: dispatchEvent ('my_custom_event', array ('varien_obj' => $ varien_object)); // ar trebui să ieșiți '456' pe măsură ce vom schimba valoarea în observer echo $ varien_object-> getCid (); ...?>

Tocmai am folosit obiectul special din Magento Varien_Object și a transmis datele noastre folosind acea pentru a vă asigura că orice modificare a datelor este păstrată.

De asemenea, va trebui să modificați în mod corespunzător codul clasei observatorului. Iată clasa de observatori modificată.

getEvent (); // metoda getter pentru a prelua varien obiect trecut de dispecer $ varien_object = $ event-> getVarienObj (); $ Varien_object-> setCid ( '456'); ?>

Singura modificare majoră a codului este preluarea textului varien obiect și folosind pentru a schimba valoarea variabilei matrice cid.

rezumat

Deși acesta este un tutorial relativ simplu, acesta arată cum putem implementa cu ușurință modelul Event-Observer în contextul unui modul personalizat Magento. În acest moment, ar trebui să fiți familiarizați cu crearea propriilor module personalizate utilizând modelul Event-Observer.

Vă rugăm să nu ezitați să lăsați întrebări și / sau comentarii în formularul de mai jos!

Cod