Bug Magento, trucs et astuces

En parallèle de la création des tutoriels sur la création d’un module, il me paraissait important de vous donner quelques pistes pouvant permettre un débugage en règle dans Magento. Voici donc un petit hors-série en cas de panne, de bug façon x-files et autre pour vous permettre d’avancer !

Le déblocage des logs dans l’index

Vous trouverez dans votre index.php vers la ligne 66 un bloc de code à retoucher ainsi, à priori pas très nécessaire que je vous détaille beaucoup les fonctions, vous ne vous seriez pas lancé dans magento sinon. « Bref j’ai affiché les erreurs » pour ne pas plagier une célèbre série. En gros 2 méthodes, la première violente comme si dessous impliquant une activation systématique, ou la seconde plus propre et permettant de ne pas pourrir son serveur de prod quand on a fini de développer sur sa VM, d’initialiser la variable MAGE_IS_DEVELOPER_MODE au niveau Apache.

 //if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
Mage::setIsDeveloperMode(true);
//}

ini_set('display_errors', 1);

Plonger dans la base de données

Deux tables sont très utiles dans magento,

  • core_ressource : qui recense les versions des modules installés avec une modification de base de données. Elle stock en son seins la version actuelle du module. Cela peux vous permettre via une modification de la valeur de réexécuter l’installation ou la mise à jour du module jusqu’à une version bien précise.
  • core_config_data : qui stocke la valeur des options placées dans le back/office.

Faire des echo discrets

Quel développeur n’a pas déjà mis des echo « toto »; ou des die(« plop »); dans son code pour mieux le dépanner? Les joies du MVC vous imposeront ici de maîtriser un nouvel outil, en effet tous les echo n’apparaîtront pas dans le code, en conséquence, vérifier dans votre back-office (BO) que l’option: System -> Configuration -> advanced ->developper->log settings est bien à Yes. Vous pourrez ainsi utiliser les capacités des deux lignes de code suivantes:

 <?php
Mage::log($array,null,'fichier.txt');
Mage::log($toto,null,'fichier.txt');

La première étant là pour afficher un tableau, et la seconde une variable ou chaîne de texte. J’ai volontairement distingué les deux cas, car il s’avère que les deux dans la même fonction ne passent pas, alors que la première ligne vous renverra l’équivalent d’un print_r.

L’affichage des blocks/template

Magento possède une fonction fortement utile, pour l’activer direction system -> configuration -> developper ->debug et activer les deux options:

  • Template Path Hints
  • Add Block Names To Hints

Vous verrez apparaitre l’emplacement des fichiers de templates et le nom des blocks correspondant directement sur magento en front-office.

Purger les caches

Ce n’est pas une technique de debug à proprement parler mais une bonne purge des caches soit via le back Office soit en dur, purge de la base de donnée, redémarrage memcached etc, permet souvent de débloquer une situation.

L’utilisation de XDebug

Certains vous dirons de l’installer avec pear ou pecl, pour ma part ce fut via aptitude. Je parle bien entendu d’une installation sous linux, au risque de paraître sectaire, mais développer sous windows ne s’est jamais révélé très pratique en ce qui me concerne pour une interface xAMP

aptitude install php5-xdebug
/etc/init.d/apache2 restart

Pensez à vérifier dans le fichier /etc/php5/apache2/php.ini que les valeurs suivantes sont bien présente avec ces valeurs, ce me parait être le strict minimum

html_errors = On
xdebug.overload_var_dump = 1

Pensez bien sur à redémarrer apache ensuite pour la prise en compte des changements.