Um in Magento den Code bzw. die Funktionalität zu erweitern ohne den Core Code zu verändern (!) gibt es Hooks und Observer, die sich dann melden wenn ein vorher definiertes Event stattfindet, z.B. Produkt in den Warenkorb gelegt, zur Kasse gehen, etc…
Programmablauf mit Events und Observern
Oben haben wir den Programmablauf mit Events und Observern grafisch dargestellt. Ausgehend vom Magento Core Code wird ein Event aufgerufen. Das kann zum Beispiel sein:
- Kunde logged sich aus
- Kunde bestellt ein Produkt
Der Observer erkennt das ein bestimmtes Event aufgerufen / ausgeführt wurde und aktiviert den Extension Code. Dieser kann den Magento Core Code überschreiben, erweitern, verändern, deaktivieren, …
Man kann die Events in drei Kategorien unterteilen: Frontend Events (diese werden aktiviert wenn man den Shop aus Kundensicht bedient), Admin Events (diese werden aktiviert wenn man den Admin-Bereich im Backend bedient) und Core Events (diese werden aktiviert wenn Kernfunktionen aufgerufen werden).
Waren es bei der Magento Version 1.4 noch 284 Events auf die man zurückgreifen konnte, sind es in der Version 1.7 bereits 394, und es werden immer mehr! Ich habe die Events in einer Tabelle zusammengetragen, sortiert nach Magento Version. Die Datei steht im Downloadbereich zum kostenlosen Download bereit.
Konfiguration des Observers
Hat man die passende Erweiterung geschrieben und angelegt (eine Schritt für Schritt Anleitung zum Erstellen einer eigenen Extension gibt es im Blog vom Magento Experten Matthias Zeis), muss man Magento in seiner config.xml Datei noch mitteilen wann die Extension ausgeführt werden soll:
Erklärung des Code-Beispiels:
- global: Hier definiert man für welchen Bereich der Observer zuständig ist.Mögliche Werte: „frontend“, „adminhtml“ oder „global“
- events: Definiert das es ein Event ist, kann unverändert bleiben.
- catalog_product_get_final_price: Definiert die Funktion, die der Observer abfangen soll. Siehe hierzu unsere Tabelle mit möglichen Events.
- observers: Definiert das es ein Observer ist, kann unverändert bleiben.
- titel_des_event_observer: Der Event-Observer benötigt eine Systemweite eindeutige Bezeichnung. Diese kann frei gewählt werden.
- type: Mit Hilfe von „singleton“ kann man bereits instanzierte Objekte aufrufen, mit „model“ wird eine neue Instanz aufgerufen
- class: Klasse die die Methode enthält die aufgerufen wird.
- method: Methode/Funktion die in der Observer-Klasse aufgerufen wird
Auf diese Weise lässt sich Magento erweitern, die Updatehfähigkeit beibehalten und vielleicht bald die erste eigene Extension auf Magento Connect einstellen.