Désactiver un observer défini par défaut dans Magento

Une autre astuce simple. Cette fois, il s’agit de pouvoir désactiver un observer défini par défaut dans Magento. Cela peut vous être utile si vous voulez empêcher qu’une méthode soit exécutée lors de l’appel de Mage::dispatchEvent(), ou tout simplement si vous souhaitez définir le comportement qui vous convient en écrivant vous-même votre propre observer.

Nous allons voir par exemple comment désactiver l’ajout d’un rapport quand un produit est ajouté à la liste d’envies.
Voici comment l’observer est défini dans app/code/core/Mage/Reports/etc/config.xml :

<?xml version="1.0"?>
<config>
    <modules>
        <Mage_Reports>
            <version>0.7.10</version>
        </Mage_Reports>
    </modules>
    <frontend>
        <events>
            <wishlist_add_product>
                <observers>
                    <reports>
                        <class>reports/event_observer</class>
                        <method>wishlistAddProduct</method>
                    </reports>
                </observers>
            </wishlist_add_product>
        </events>
    </frontend>
</config>

Pour le désactiver, il suffit de modifier le fichier config.xml de votre extension ainsi :

<?xml version="1.0"?>
<config>
    <modules>
        <MyNamespace_MyModule>
            <version>0.1.0</version>
        </MyNamespace_MyModule>
    </modules>
    <frontend> <!-- Attention à bien utiliser <frontend> comme ci-dessus, <global> ne fonctionnera pas -->
        <events>
            <wishlist_add_product>
                <observers>
                    <reports>
                        <type>disabled</type>
                    </reports>
                </observers>
            </wishlist_add_product>
        </events>
    </frontend>
</config>

Attention ! Il faut absolument utiliser le même « scope » de configuration pour désactiver ou surcharger un observer défini par défaut. Si vous utilisez <global> dans votre extension et que Magento définit l’observer dans <frontend>, cela ne fonctionnera pas.

5 réponses à “Désactiver un observer défini par défaut dans Magento”

  1. atwix dit :

    Hi! Thanks for sharing your solution. This is a great post. We have an article on similar topic posted here http://www.atwix.com/magento/observers-reality-or-fiction/
    you’re welcome to check it out and leave your feedback.

  2. CG dit :

    Hi,
    thanks helped a lot. We had to disable a observer function from a extension, which was causing heavy load on the server.

    So far the extension still works as intendet.

  3. sreenu dit :

    i created a custom menu and submenus
    in that i want groups and fields am not getting not in the
    please help me
    thank you

  4. Mark Won dit :

    This was very helpful. I was wondering why a normal rewrite to a 3rd party observer wasn’t working. The information here allowed me to figure it out.

    Thanks for posting it!

  5. James Simpson dit :

    Can we disable an observer based on page – I.E. I am doing some profilling at the moment, and on the cart page, configurable swatches are letting the load speed down, but they are not used on the cart page at all, so in theory, if i disable the observer on the cart page, it will save 3 seconds on the page load time.

Laisser un commentaire

* Champs requis

Categories