Magento’s Event-Observer-Pattern – Oder: Die bessere Art Core-Code zu erweitern

Häufig muss man als Entwickler Daten an bestimmten Stellen im Code modifizieren.
Um die Updatefähigkeit von Magento zu erhalten, wird üblicherweise ein Modul erstellt
und die entsprechende Klasse überschrieben.

Dieses Vorgehen kann allerdings zu Konflikten mit anderen Modulen führen, die möglicherweise die selbe Klasse überschreiben.

Eine viel elegantere Möglichkeit den Core-Code bei bestimmten Ereignissen zu überschreiben,
bietet das Event-Observer-Pattern, welches in Magento vollständig integriert ist.
Der große Vorteil hierbei ist, dass auf Daten Einfluss genommen werden kann, ohne
die entsprechenden Methoden zu bearbeiten oder zu überschreiben. Darum sollte, falls möglich,
diese Variante unbedingt dem Überschreiben von Klassen vorgezogen werden.

Um ein Event zu „beobachten“ muss man lediglich in der config.xml seines Moduls folgendes hinzufügen:

<?xml version="1.0"?>
<config>
  <!-- ... -->
  <global>
    <!-- ... -->
    <events>
      <name_des_events>
        <observers>
          <modulname>
            <type>singleton</type>
            <class>modulname/observer</class>
            <method>aufzurufendeMethode</method>
          </modul_name>
        </observers>
      </name_des_events>
    </events>
    <!-- ... -->
  </global>
  <!-- ... -->

Damit ist der eigene Observer in Magento registriert und wird dann aufgerufen, wenn im
Code mithilfe von Mage::dispatchEvent() der Eventcode „name_des_events“ aufgerufen wird.
Eine Liste aller Events, die in Magento vorhanden sind gibt es hier: http://www.nicksays.co.uk/magento_events_cheat_sheet/.

Danach muss nur noch die Klasse Package_Modulname_Observer mit der Methode
aufzurufendeMethode erstellen und die vom Event übergebenen Daten können
verarbeitet werden. (Bitte nicht vergessen die Models in der Modul-Config zu registrieren!)

class Package_Modulname_Model_Observer
{
    public function aufzurufendeMethode($observer)
    {
        $data = $observer->getEvent()->getData();
        //hier können die Daten verarbeitet werden
    }
}

Hier noch eine tiefer gehende Beschreibung des Entwurfsmusters: http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)

  • Diesen Beitrag weiterempfehlen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Lösen Sie bitte die Rechenaufgabe. *