Le système d’override de Magento est très puissant et relativement facile à mettre en place pour les Blocks , Helper et modèles.

En effet ( même si ce n’est pas la méthode recommandée) , il est possible de copier le fichier à surcharger de son arborescence initiale vers le codePool local, et d’y réaliser directement les modifications.

Ex pour le module Cms :
app/code/core/Mage/Cms/Block/Page.php vers app/code/core/Mage/Cms/Block/Page.php
app/code/core/Mage/Cms/Helper/Page.php vers app/code/core/Mage/Cms/Helper/Page.php
app/code/core/Mage/Cms/Model/Page.php vers app/code/core/Mage/Cms/Model/Page.php

Cette surcharge permets également de surcharger les modules placés dans le codePool Community, car si un fichier avec la même arborescence existe dans le codePool local, c’est toujours lui qui sera utilisé.

En revanche pour surcharger un fichier config.xml ou system.xml , il va être nécessaire de créer un module.
( Je ne détaille pas la création de celui-ci )

Commençons par le fichier config.xml

Le principe de l’override est simple, nous allons créer dans le fichier config.xml de notre module le même chemin xml que celui que nous souhaitons overrider.

Plusieurs exemples :

  • Lancer l’indexation des prix via une tache cron 2 fois par jours au lieu d’une fois
  • Désactiver l’observer customer_save_after du module Mage_newsletter

Avant toute chose, pour que votre module soit bien chargé après les modules que nous souhaitons réécrire il est nécessaire de le spécifier dans les dépendances du module via le noeud depends

<depends>
    <Mage_Catalog />
    <Mage_Newsletter />
</depends>

Et voici ce que nous devons mettre dans notre fichier config.xml

<frontend>
    <events>
        <customer_save_after>
            <observers>
                <newsletter_subscribe_observer>
                    <type>disabled</type> <!-- Désactivation de l'observer -->
                </newsletter_subscribe_observer>
            </observers>
        </customer_save_after>
    </events>
</frontend>
<crontab>
    <jobs>
        <catalog_product_index_price_reindex_all>
            <schedule>
                <cron_expr>0 2,14 * * *</cron_expr> <!-- Changement de la programmation cron -->
            </schedule>
        </catalog_product_index_price_reindex_all>
    </jobs>
</crontab>

Notre fichier de configuration xml étant chargé après les modules du cœur, leur configuration va être écrasée ou complétée par les informations de notre module 🙂

Le fonctionnement est exactement le même pour le fichier system.xml
Il faut reprendre le même chemin xml, et changer les valeurs souhaitées.

Exemple :
– Possibilité d’activer le module de livraison FreeShipping par Magasin ( au lieu de par Site par défaut )

Dans le fichier system.xml de notre module nous allons mettre les informations suivantes :

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <sections>
        <carriers>
            <groups>
                <freeshipping>
                    <fields>
                        <active>
                            <show_in_store>1</show_in_store><!-- Remplacement de 0 par 1 -->
                        </active>
                    </fields>
                </freeshipping>
            </groups>
        </carriers>
    </sections>
</config>

Et voila vous savez à présent comment surcharger les fichiers de configuration magento ! 🙂