Events bieten die Möglichkeit, den Funktionsumfang von Magento zu erweitern, ohne die Flexibilität zu verlieren und sich keine Gedanken darum machen zu müssen, ob andere Extensions auf die gleichen Klassen zugreifen. Dazu ist es nötig zu wissen, wie ein Event ausgelöst und wie man darauf reagiert.
1. Schritt: Events auslösen
Innerhalb von Magento wird durch diese Zeile
Mage::dispatchEvent('webguys_event', array('object'=>$this));
ein Events ausgelöst. Dabei repräsentiert 'object' vom Kontext abhängige Variablen. Diese können z.B. auch Controller, Order oder ähnlich heißen.
2. Schritt: Auf Events reagieren
An dieser Stelle hat man zwei Möglichkeiten, entweder man implementiert die Reaktion in ein bestehendes Modul oder erstellt ein neues. Für den Adventskalender erstellen wir ein neues.
Zuerst die etc/config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Webguys_Advent>
<version>0.0.1</version>
</Webguys_Advent>
</modules>
<global>
<helpers>
<advent>
<class>Webguys_Advent_Helper</class>
</advent>
</helpers>
</global>
<frontend>
<events>
<webguys_advent>
<observers>
<custom_event_handler>
<type>model</type>
<class>webguys_event/observer</class>
<method>adventObserverAction</method>
</custom_event_handler>
</observers>
</webguys_advent>
</events>
</frontend>
</config>
Natürlich benötigen wir noch die verarbeitende Klasse Webguys_Advent/Model/Observer.php:
class Webguys_Event_Model_Observer {
public function adventObserverAction(Varien_Event_Observer $observer) {
$object = $observer->getEvent()->getObject();
/* magic */
return $this;
}
}
Am Ende noch schnell einen leeren Helper Webguys_Advent/Helper/Data.php erstellen, dann kann es schon losgehen.