Objectif
La manière classique de personnaliser les fonctionnalités natives de Magento est de créer un module surchargeant les contrôleurs, modèles ou blocs du noyau.
Une autre méthode basée sur le mécanisme Événement – Observateur (event – observer) permet parfois d’obtenir le même résultat en limitant le couplage inter-modules.
Le principe est le suivant, Magento est conçu de façon à lever et récupérer des événements lors de certaines manipulations, comme par exemple, la sauvegarde d’un produit.
Pour résumer :
- événement (ou event) se produit à un certain moment lors d’une séquence d’actions utilisateur ;
- observateur (ou observer) est l’objet notifié lorsque l’un des événements qu’il surveille se produit.
Démonstration
Pour illustrer ce mécanisme, nous allons créer un nouveau module définissant un observateur qui surveille la fonctionnalité d’envoi de la référence d’un article à un ami afin de journaliser cet événement lorsqu’il a lieu.

Créer le module
Créer l’architecture et les fichiers du nouveau module :
nico@laptop:/var/www/magento/app/code/local/$ tree
`-- LibreAVous
`-- EmailToAFriend
|-- Model
| `-- Observer.php
`-- etc
`-- config.xmlDéclarer le module
Ajouter le fichier LibreAVous_EmailToAFriend.xml dans « /app/etc/modules/ » :
<?xml version="1.0"?> <config> <modules> <!-- déclarer notre module auprès de Magento --> <LibreAVous_EmailToAFriend> <active>true</active> <codePool>local</codePool> </LibreAVous_EmailToAFriend> </modules> </config>
Afin de s’assurer que le module est activé, se rendre sur le backoffice de Magento et naviguer via le menu : “System > Configuration” puis sur l’onglet “Advanced” pour consulter la liste des modules.
Créer l’observateur
L’observateur suivant récupère le produit dont le lien a été envoyé par e-mail et journalise un message dans le fichier de log standard de Magento (/var/log/system.log) :
<?php class LibreAVous_EmailToAFriend_Model_Observer { public function logSending($observer) { $product = $observer->getData('product'); Mage::log("a link to {$product->getName()} product was send"); } }
Configurer le module
Il ne reste plus qu’à associer la méthode de notre observateur à l’événement identifié par « sendfriend_product » dans le fichier de configuration « config.xml » :
<?xml version="1.0"?> <config> <modules> <LibreAVous_EmailToAFriend> <version>0.2.0</version> </LibreAVous_EmailToAFriend> </modules> <global> <events> <sendfriend_product> <observers> <log_sending> <type>singleton</type> <class>LibreAVous_EmailToAFriend_Model_Observer</class> <method>logSending</method> </log_sending> </observers> </sendfriend_product> </events> </global> </config>
Tester le module
Afin de tester notre module, s’identifier en tant que client sur le front, se rendre sur la fiche d’un produit puis cliquer sur le lien « Email to a friend » pour remplir le formulaire suivant :

Une fois l’e-mail envoyé, consulter le message dans le fichier de log standard :
nico@laptop:/var/www/magento/var/log$ more system.log 2009-05-28T20:34:18: a link to Barcelona Bamboo Platform Bed product was send
Conclusion
Lors d’un billet précédent, nous avons présenté la surcharge d’un bloc du backoffice afin d’en modifier le rendu. Dans certains cas, il sera possible de personnaliser Magento via une surcharge ou la création d’un observateur et l’on peut se poser la question du choix de la méthode à utiliser ?
Ceci dépend surtout du contexte, mais d’un point de vue général (et personnel
), on peut préconiser l’utilisation d’un observateur pour ajouter une logique spécifique au fonctionnement du coeur de Magento et réserver les surcharges à la modification ou au remplacement du fonctionnement standard.
Enfin, nous noterons la possibilité de lever nos propres événements lors de la création de modules pour faciliter l’ajout ultérieur de fonctionnalités :
Mage::dispatchEvent('identifiant_de_mon_evenement', array('arg1'=>argument));
Magento
Joomla!
Zend Fr.
Ubuntu



![Validate my RSS feed [Valid RSS]](/wp-content/themes/libre-a-vous/images/rss-valid.png)