Magento et les Observers

Magento-observer

Magento est pour moi et pour beaucoup d’autres développeurs de site e-commerce, la future solution e-commerce de référence dans le monde de l’Open Source PHP. Les possibilités de développement et la facilité avec laquelle on peut mettre en place des besoins métier sont assez bluffantes, si toutefois l’on maîtrise un tantinet la bête.

Pour accompagner cet élan d’enthousiasme, voici comment on peut utiliser le système d’evenement/observer dans Magento. Le principe de base est assez simple, il s’agit de dire à Magento de faire une ou plusieurs actions lorsqu’un évènement précis se produit (l’ajout d’un article au panier par exemple).

Voici donc comment on peut très simplement surveiller l’ajout d’un produit dans le panier.

Fichier Observer.php

Il nous faut tout d’abord avoir créé un module, pour cela il existe un tutoriel sur le wiki officiel de Magento. On va créer un fichier Observer.php que l’on place dans le dossier Model de notre module (nommé ci après Monmodule, avec le Namespace Australopitech). On y crée la classe Australopitech_Monmodule_Model_Observer.

< ?php
/**
 * Observer pour catcher l'événement d'ajout d'un produit au panier
 *
 * @category   Australopitech
 * @package    Australopitech_Monmodule
 */
class Australopitech_Monmodule_Model_Observer
{
 
    /**
     * On catch l'évènement 'checkout_cart_add_product_complete' pour faire ...ce qu'on veut :-)
     * c'est dans le fichier etc/config.xml du module que l'on indique à Magento que nous attendons que cet
     * événement soit dispatché pour exécuter cette méthode.
     *
     * @param $observer
     */
    public function cart_added_product($observer)
    {
       //ce qu'il faut exécuter...
    }
 
}

Fichier config.xml

Dans le config.xml situé dans le dossier ‘etc’ du module, on rajoute les lignes suivantes entre les balises <frontend></frontend> :

<events>
    <checkout_cart_add_product_complete>
        <observers>
<product_cart_added_success>
                <type>singleton</type>
                <class>monmodule/observer</class>
		<method>cart_added_product</method>
            </product_cart_added_success>
        </observers>
    </checkout_cart_add_product_complete>
</events>

Dans ce fichier, on dit à Magento de surveiller l’événement “checkout_cart_add_product_complete” et d’exécuter la méthode cart_added_product() de la classe Xprime_Monmodule_Model_Observer quand celui-ci est dispatché.

Lorsque un produit est ajouté au panier, l’action addAction() se trouvant dans le controller cart du module checkout est exécutée. Si tout se passe bien, l’événement ‘checkout_cart_add_product_complete’ est alors “dispatché”.

Mage::dispatchEvent('checkout_cart_add_product_complete', array('product'=&gt;$product, 'request'=&gt;$this-&gt;getRequest()));

L’Observer que nous avions précédemment créé est alors sollicité et la méthode cart_added_product() est exécutée.

Articles relatifs

12 Responses to “Magento et les Observers”

  1. “la future solution e-commerce “? Cela ne l’est pas déjà?

    Répondre

    @bdelpla, J’ai pas voulu être étiqueté “évangéliste Magento”, en réalité Magento a donné un sacré coup de vieux à oScommerce et si la communauté Magento continue à participer activement à ce projet elle sera pour sûr la solution e-commerce de référence.

    Répondre

  2. Avez vous des exemples de sites ecommerce sous magento?

    Répondre

    @Benoit, On va en sortir un très bientôt pour un de nos client et un autre site devrait suivre dans le foulée pour un autre client.

    Pour ce qui est des sites existants en voici une petite liste :

    http://www.gitem.fr/
    http://www.enjoysunglasses.com/
    http://www.zadig-et-voltaire.com/
    http://shop.jack-wolfskin.de/

    On peut en trouver plus ici : http://magentique.com ou sur le site de Magento : http://www.magentocommerce.com/blog/category/magento-spotting/

    Répondre

    @Mohamed : Merci pour ces liens ! tu as fini de me convaincre. Notre prochain site sera sous magento !

    Répondre

  3. Bonjour,
    Dans le Config.xml, juste après la balise faut-il pas mettre plutôt au lieu de ?

    Répondre

  4. excusez mon dernier post :
    Dans le Config.xml, juste après la balise “observers” faut-il pas mettre plutôt la balise “monmodule”au lieu de “product_cart_added_success”?

    Répondre

    @Mohammed, Bonjour,

    en réalité on met ce qu’on veut, ce nom sert à identifier l’observer car il peut y’avoir plusieurs observers qui observent le même évènement.

    Cordialement,

    Répondre

    @Mohamed, Bonjour,
    Merci pour ces explications.

    Répondre

  5. petite precision, frontend c’est le scope ou la portée de l’évenement à observer, celui ci peut également être global ou adminhtml

    Répondre

  6. Bonjour,
    Merci pour ces explications.
    j’ai besoin d’exécuter une action après le chargement d’une page produit. Comment définir l’écouteur? merci

    Répondre

    @Frank,

    il y’a l’évenement ‘catalog_controller_product_view’ qui te donne le produit chargé dans la variable product.

    Cdt,

    Répondre

Leave a Reply