Med tanke på antall e-handelskonferanser tilgjengelig på markedet, er Magento et av de mest populære valgene for mellomstore nettbutikker. Både dens funksjonssett og dets arkitektur bidrar til å skille seg fra mange av de andre alternativene som er tilgjengelige i dag.
Selv om det finnes mange tredjepartsutvidelser for Magento, er det også enkelt å utvikle din egen. Formålet med denne opplæringen er ikke å gå gjennom hvordan du lager en egendefinert utvidelse; Det antas imidlertid at du er kjent med prosessen, da vi skal bruke et mønster for å implementere vår egen tilpassede modul.
Spesielt ser vi på Event-Observer-mønsteret. For de som ikke er kjent registrerer observatører seg selv for å vente på en hendelse slik at de kan utføre kode når en hendelse er sparken.
Som nevnt antar denne opplæringen at du er kjent med hvordan du utvikler egendefinerte moduler innen Magento, fordi vi skal lage en egendefinert modul som benytter det designmønsteret.
Først må vi deklarere observatøren for vår tilpassede begivenhet. For å gjøre dette, skriv inn følgende kode i modulens config.xml-fil like innenfor det globale elementet.
Vi forklarer koden øyeblikkelig.
... ... singleton module / observatør my_custom_method
I koden ovenfor har vi nettopp erklært observatøren for den nevnte hendelsen my_custom_event
. Dette betyr ganske enkelt at når my_custom_event
blir sparket, vil det se at observatøren for denne hendelsen er registrert i modulen din og deretter utføre koden som er knyttet til hendelsen.
I vårt tilfelle vil det kalle metoden my_custom_method
definert i klassen Namespace_Modulename_Model_Observer
.
La oss nå ta dette et skritt videre. Legg merke til at i
tag, kan du definere hendelsene som du vil registrere observatørene. I vårt tilfelle har vi registrert observatøren for arrangementet
. Du kan også definere flere observatører for samme arrangement. I så fall erklærer alle dine observatører inni
stikkord.
Deretter pakkes hver observatør med en unik identifikator. I vårt eksempel er det
. Videre må du spesifisere klassenavnet og metodenavnet som skal utføres. De
tag angir plasseringen av klassen i henhold til Magento-konvensjonen.
I vårt eksempel vil det være Observer.php
under modell
katalog av module
modul. Metodenavnet erklæres av
stikkord. Verdien av
tag er "singleton" som betyr at den vil bruke samme forekomst av observatørobjektet for hver hendelsesanrop.
Nå, etter å ha erklært vår observatør, la oss skape observatørklasse og tilhørende metodekode. Lag en fil Observer.php
under Modell
katalog av modulen din. Kopier og lim inn følgende kode i den filen.
getEvent (); // getter metode for å hente cid verdi passert fra dispatcher $ cid = $ event-> getCid (); ekko $ cid; exit; ?>
Her har vi nettopp opprettet observatørklassen. I my_custom_method
metode, har du tilgang til observatørobjektet og dataene som sendes sammen med det fra dispatcheren, slik at du kan bruke den til å gjøre noe meningsfylt.
I dette eksemplet har vi nettopp hentet verdien av cid
variabel bestått fra senderkoden som vi ser om et øyeblikk.
Selvfølgelig må du endre module
og namespace
i henhold til din egendefinerte modul i klassefilen og XML-deklarasjonen.
Som vi har erklært observatøren i den egendefinerte modulen, er det eneste gjenværende å sende vår tilpassede begivenhet.
La oss se hvordan du kan bruke Magento's event dispatcher fra din tilpassede modul. Skriv følgende kode i kontrollerens metode fra hvor du vil sende hendelsen. Når det er sagt, kan du også skyte hendelsen fra andre steder bortsett fra kontrolleren.
'123'); Mage :: dispatchEvent ('my_custom_event', $ event_data_array); ...?>
Som du kan se er det ganske greit å sendehendelsen fra nesten hvor som helst i Magento. Det første argumentet til dispatchEvent
Metoden er navnet på hendelsen, og det andre argumentet brukes til å sende dataene til observatører.
Som du kanskje har lagt merke til tidligere i observatorklassen, har vi brukt gettermetoden for å få tilgang til verdien av variabelen cid
.
I de fleste tilfeller er hendelsesdataene som sendes til observatørene, i skrivebeskyttet modus. Nærmere bestemt kan observatører ikke endre verdien av variablene som passerer av hendelsesleverandørmetoden.
Anta at du har sendt en tilpasset begivenhet i modulen din, og du vil at observatørene skal kunne endre de opprinnelige begivenhetsdataene som er bestått. La oss se på senderkoden for å oppnå dette.
'123'); $ varien_object = nytt Varien_Object ($ event_data_array); Mage :: dispatchEvent ('my_custom_event', array ('varien_obj' => $ varien_objekt)); // skal output '456' som vi vil endre verdien i observatør echo $ varien_object-> getCid (); ...?>
Vi har nettopp brukt det spesielle objektet fra Magento Varien_Object
og passerte dataene våre ved å sørge for at eventuelle endringer i dataene blir bevart.
Du må også endre observatorklassekoden tilsvarende. Her er den modifiserte observatørklasse.
getEvent (); // getter metode for å hente varien objekt bestått fra senderen $ varien_object = $ event-> getVarienObj (); $ Varien_object-> setCid ( '456'); ?>
Den eneste store endringen i koden er å hente Varien
objekt og bruk det for å endre verdien av array variabelen cid
.
Selv om dette er en relativt enkel opplæring, viser den hvordan vi enkelt kan implementere Event-Observer Pattern i sammenheng med en Magento tilpasset modul. På dette tidspunktet bør du være kjent med å lage dine egne tilpassede moduler ved hjelp av Event-Observer-mønsteret.
Ikke nøl med å legge igjen spørsmål og / eller kommentarer i skjemaet under!