Magento permette ad un nostro modulo personalizzato di eseguire la riscrittura tramite estensione di una classe base attraverso la direttiva <rewrite></rewrite> che può essere inserita nel file config.xml del nostro modulo.

Possiamo eseguire un rewrite di block, model, helper e controller.  Spesso può capitare che una stessa classe sia stata riscritta da più moduli. Cosa succede in Magento? Come si comporta? Riesce a gestire i conflitti tra moduli in maniera automatica?

Se non sono state prese precauzioni, vince l’ultimo modulo che viene letto. Esiste quindi la possibilità che un modulo di terze parti alteri il comportamento del nostro sistema Ecommerce Magento in un modo inaspettato. Per questo è sempre buona norma fare un backup del database e testare i moduli che si vogliono aggiungere in un ambiente di test cercando di ripetere dei test il più possibile automatici.

Come possiamo accorgerci se c’è un conflitto di moduli? Se usiamo un IDE come Php Storm e il plugin Magicento, quest’ultimo si accorgerà per noi e ci avvertirà del problema da risolvere. Bene, una volta individuato questo conflitto come possiamo risolvere un problema?

Supponiamo che il modulo A e il modulo B sovrascrivano la stessa classe C del core. Se il conflitto non è risolto, se il modulo B viene caricato dopo il modulo A, il codice del  modulo B verrà utilizzato per il rewrite.

Abbiamo tre strade da intraprendere per risolvere il conflitto :

  1.  Prendere il codice del modulo A che sovrascrive la classe C e unirlo con il codice del modulo B che sovrascrive la classe C. Nel config.xml del modulo A disattiviamo il rewrite
  2.  Possiamo eliminare il rewrite nel file config.xml del modulo A alla classe C e nello stesso modulo fare un rewrite della classe del modulo B che estende la classe C
  3.  Si può usare la direttiva <depend> per fare in modo che un modulo dipenda da un altro

In sostanza Magento fino alla versione attuale 1.9.0.1 non ha un metodo per gestire i conflitti sul rewite della classi base. Per questo è fondamentale prima di mettere in produzione un modulo acquistato sul connnect, la fase di analisi in ambiente di test.