Utilisation des events et des observers
Un observer est une classe qui va exécuter une fonction lorsqu'un event est déclenché.
Un event est déclenché via la fonction
Mage::dispatchEvent('nom_de_levent');
Syntaxe de déclaration d'un observer
Les observers sont déclarés dans le config.xml de notre module :
<frontend>
<events>
<customer_login> <!-- Nom de l'event -->
<observers>
<formation_test_customer_login> <!-- Nom de notre observer -->
<type>singleton</type> <!-- On pourrait ici mettre disabled pour désactiver un observer -->
<class>formation_test/observer</class> <!-- Classe Formation_Test_Model_Observer.php -->
<method>customerLogin</method> <!-- Méthode de la classe ci-dessus à appeler -->
</formation_test_customer_login>
</observers>
</customer_login>
</events>
</frontend>
Création de l'observer
Nous allons donc créer notre classe Formation_Test_Model_Observer :
<?php
class Formation_Test_Model_Observer {
/**
* Change customer name on login
*
* @event customer_login
**/
public function customerLogin($observer) {
$event = $observer->getEvent();
$customer = $event->getCustomer();
$customer->setName(time());
$customer->save();
}
}
À chaque login client, nous allons changer son nom.
Trouver le nom de l'event
Il y a plusieurs méthodes pour trouver le nom d'un event :
- Aller dans le code à l'endroit où vous voulez intervenir et regarder s'il y a un appel à la fonction
Mage::dispatchEvent() - Trouver la liste de tous les events Magento et chercher celui qui pourrait correspondre
- Faire un log dans la fonction
dispatchEvent()du fichierapp/Mage.phpet regarder celui qui pourrait correspondre
Liste des events : http://rabee.me/2014/06/06/Magento-Events-Cheat-Sheet-1-9/
Les event magiques
Il existe pour chaque models des observers magiques sur les fonctions load, save et delete. Ils sont visibles dans la classe Mage_Core_Model_Abstract.
Idem pour les fonction preDispatch et postDispatch des controllers, qui sont visibles dans la classe Mage_Core_Controller_Varien_Action.
TP - Le site ne doit être accessible qu'aux clients connectés
En utilisant un observer, faire en sorte de rediriger toutes les pages vers le formulaire de login si le client n'est pas connecté.
- Nous utiliserons l'event magique sur le
preDispatch - Attention, il ne faut pas que cet observer se déclenche si nous sommes sur la page de login et sur la page de post login
- Utiliser les fonctions
Mage::app()->getRequest()->getControllerName(); Mage::app()->getRequest()->getActionName(); Mage::app()->getRequest()->getRouteName(); Mage::app()->getRequest()->getModuleName();
- Utiliser les fonctions
Formation Magento Developpeur
Magento 1.X