Personnaliser Magento : création d’un observer

Objectif

Afin de personnaliser Magento, il est possible d’ajouter des traitements spécifiques grâce au mécanisme Event – Observer.

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 :

  • event se produit à un certain moment lors d’une séquence d’actions utilisateur ;
  • 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 observer. Celui-ci 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.

magento-send-to-a-friend-link

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.xml

Dé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’observer

L’observer 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

Commencer par rafraîchir le cache configuration via le back office, puis par vérifier que le module est reconnu par Magento en se rendant dans le menu Système > Configuration, puis vérifier qu’il est présent dans la liste de l’onglet Avancé.

Ensuite vérifier que le log est activé, en se rendant dans le menu Système > Configuration, puis onglet développeur et Paramètres du Log activé.

Enfin, 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 :

magento-send-to-a-friend-form

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 :D ), 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));

Ressources complémentaires

Développement , Permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">