Accélérez vos développements Magento avec MageTool

MageTool est un utilitaire ajoutant un certain nombre de commandes à la console Zend_Tool du Zend Framework et qui vous assistera dans la réalisation de bon nombre de tâches liées au développement sur la plateforme Magento (création de modules, réécritures de classes, gestion du cache...).

MageTool est en fait un regroupement de deux utilitaires nommés MageTool et Mtool. Mtool est principalement dédié à la manipulation de modules et la génération de code tandis que MageTool y apporte des tâches d'administration (typiquement celles qu'on retrouvera en backoffice).

Prérequis

  • PEAR (si vous passez par une installation avec PEAR, méthode officielle)
  • Git (si vous passez par une installation "manuelle" avec Git)
  • Zend_Tool

Installation avec PEAR

Vous pouvez suivre les instructions d'installation officielles qui font usage de PEAR ( https://github.com/alistairstead/MageTool ). Sachez toutefois qu'à l'heure où j'écris ces lignes, cette méthode ne fonctionne que partiellement. En effet, le sous-module MTool est incomplet et il manque principalement les templates pour la génération de code. Si vous êtes dans cette situation et que vous rencontrez un problème pendant l'installation officielle ou l'utilisation de MageTool, les éléments ci-dessous pourront peut-être vous être utiles, sinon passez directement à la section "Utilisation" :

Si PEAR ne veut pas installer le paquet en version beta, utilisez cette commande :
pear install magetool/magetool-beta

Si vous rencontrez des difficultés avec la commande echo 'basicloader.classes.1 = "MageTool_Tool_Manifest"' | tee ~/.zf.ini, il faut écrire manuellement la ligne suivante dans le fichier .zf.ini (qui doit être placé à la racine de votre répertoire utilisateur) :
basicloader.classes.1 = "MageTool_Tool_Manifest"

L'installation par PEAR ne rapatrie pas tout ce qu'il faut pour Mtool. Si vous rencontrez des erreurs lors de l'exécution de commandes liées à la génération de code, c'est probablement qu'il manque des éléments tels que les templates. Rendez-vous sur le dépôt du projet Mtool ( https://github.com/dankocherga/MTool ) et téléchargez le dossier Mtool que vous placerez dans le répertoire MageTool/lib/ de votre installation locale.

Installation avec Git

Placez-vous à l'endroit où vous souhaitez installer le module et clonez le projet :
git clone https://github.com/alistairstead/MageTool.git

Placez-vous dans le répertoire MageTool fraîchement créé et listez les tags disponibles :
git tag -l

Nous allons utiliser le tag le plus récent qui ne soit pas une version alpha (pour avoir quelque chose d'assez stable), actuellement il s'agit de la version 0.5.1 :
git checkout tags/0.5.1

Il nous manque plus que les sous-modules (vous verrez qu'il y a 2 dossiers vides dans le répertoire MageTool/lib/). Le fichier .gitmodules à la racine du projet contient la liste des sous-modules. Pour les rapatrier nous utiliserons les commandes suivantes :

git submodule init
git submodule update

Si vous obtenez une erreur du type "Permission denied (publickey)", deux solutions s'offrent à vous. La première est de créer un compte sur GitHub (https://github.com). Si vous possédez déjà un compte sur GitHub, c'est que vous ne possédez pas de clé SSH ou que cetté clé n'a pas été enregistrée sur votre compte GitHub. Les instructions à l'adresse https://help.github.com/articles/generating-ssh-keys devraient vous permettre de faire le nécessaire pour y remédier. Une fois que votre configuration SSH est bonne, vous pourrez utiliser la commande git submodule update.

La 2ème solution vous demandera de modifier le fichier .gitmodules pour changer l'URL du module MTool. Remplacez git@github.com:alistairstead/MTool.git par git://github.com/alistairstead/MTool.git. Afin que ce changement soit pris en compte, il faut supprimer le module de votre configuration locale :
git submodule deinit MageTool/lib/MTool
Après cela, vous pourrez à nouveau exécuter les commandes git submodule init, puis git submodule update.

Maintenant insérer la ligne suivante dans le fichier .zf.ini (à la racine de votre répertoire utilisateur) afin d'enregistrer les commandes MageTool auprès de la console ZF :
basicloader.classes.1 = "MageTool_Tool_Manifest"

Il ne reste plus qu'à ajouter le dossier MageTool à l'include_path de PHP en modifiant votre php.ini, là je vous laisse faire 😉

Vérifiez l'installation en tapant "zf" dans votre console, la liste des commandes de MageTool devraient s'afficher juste après les commandes natives de Zend_Tool.

Utilisation de MageTool

Pour exécuter les commandes, il faut se placer à la racine d'un projet Magento. S'il s'agit d'un projet vierge, pensez à passer le processus d'installation avant tout, afin que vous disposiez d'un fichier local.xml dans le répertoire app/etc/ contenant, entre autres, les accès à la base de données.

La première fois qu'une commande Mtool (concernant de la génération de code) est lancée dans un projet, on vous demande de renseigner certaines données, notamment l'auteur, pour les docblocks (commentaires). Elles seront mémorisées dans un fichier .mtool.ini situé à la racine de votre répertoire utilisateur. Vous pourrez donc les modifier à cet endroit-là.

Si votre IDE ne peut pas ouvrir les fichiers XML qui ont été générés ou si certains fichiers n'ont pas pu être générés du tout, vérifiez le fichier .mtool.ini. Il faut que ce fichier soit bien encodé en UTF-8.

Vous trouverez la liste complète des commandes à l'adresse suivante : https://github.com/alistairstead/MageTool/blob/master/README.markdown. Les commandes MageTool concernent les tâches d'administration et celles de la dépendance Mtool s'occupent de la génération de code.

Exemples d'utilisation

Nous allons découvrir l'utilité de MageTool à travers une petite série d'exemples tirés d'un scénario fictif. Ce scénario est le suivant : nous venons de récupérer un projet Magento et nous nous apprêtons à y faire quelques modifications.

Nous souhaitons tout d'abord connaître la version de Magento utilisée afin d'orienter nos développements :
zf version mage-app

Les URLs enregistrées dans la configuration sont peut-être celles de l'instance de production, nous pouvons le vérifier en affichant l'URL actuellement configurée :
zf show mage-core-config web/unsecure/base_url

Nous allons remplacer toutes les configurations contenant l'URL de production pour correspondre à celle de notre instance locale :

zf replace mage-core-config --match http://www.mon-site-web-magento.com --value http://magento.local/

Nous pouvons dorénavant accéder à notre instance locale sans être redirigés vers la production. Malheureusement en tentant d'accéder au backoffice, nous nous rendons compte que nous n'avons pas de compte administrateur. Affichons la liste des comptes existants :
zf show mage-admin-user

En effet, aucun compte ne nous est familier. Heureusement nous pouvons créer un nouvel administrateur en une seule commande :
zf create mage-admin-user johnadmin john.doe@domain.com mot-de-passe

Nous sommes prêts pour le développement, mais n'oublions pas de désactiver le cache pour que nous puissions constater les changements au fure et à mesure de nos avancements :
zf disable mage-core-cache

Créons un module qui accueillera notre code :
zf create mage-module Vendor/MyModule

Une arborescence Vendor/MyModule/etc/ a été créée dans le pool local avec un fichier config.xml vierge et le module a été déclaré dans app/etc/modules.

Nous allons ensuite avoir besoin d'un helper :
zf create mage-helper Vendor/MyModule MyModule/Data

Le helper a bien été créé et déclaré dans notre config.xml. Faisons de même pour un modèle :
zf create mage-model Vendor/MyModule MyModule/MyModel

Là aussi, le modèle a été créé et enregistré dans notre config.xml. Notre module nécessitera l'ajout d'une table à la base de données. Nous avons donc besoin d'un script d'installation :
zf install mage-module Vendor/MyModule 0.1.0

La version de notre module a été ajoutée au fichier config.xml et un squelette de script d'installation a été créé sous Vendor/MyModule/sql/vendor_mymodule_setup. Cette ressource a également été ajoutée à notre config.xml.

Après avoir complété le script d'installation, nous accédons au frontoffice pour tester son exécution. Pas de chance, le résultat n'est pas celui qui était attendu. Vérifions si le module a bien été installé en scrutant le contenu de la table core_resource :
zf show mage-core-resource vendor_mymodule_setup

Le module semble exister. En regardant le code du script nous nous rendons compte d'une petite erreur que nous corrigeons. Afin de repasser le script d'installation, il nous faut supprimer la ressource enregistrée en base de donnée :
zf delete mage-core-resource vendor_mymodule_setup

En repassant le script, nous constatons que tout est bon. Mais il faut encore que nous réécrivions un block existant. Ici, nous surchageront le block responsable de l'affichage du header :
zf rewrite mage-block Vendor/MyModule page/html_header header

La réécriture a été ajoutée à notre config.xml et un fichier Header.php (contenant la classe Vendor_MyModule_Block_Header) a été déposé dans Vendor/MyModule/Block/.

Notre module est fini, place aux dernière vérifications. Purgeons le cache :
zf flush mage-core-cache

Et lançons les réindexations car notre module a modifié pas mal de produits et de catégories.
zf run mage-core-indexer

Après avoir effectué les dernières vérifications, nous voilà prêts à déployer !

Conclusion

MageTool permet de gagner du temps dans l'accomplissement de plusieurs tâches fréquentes et souvent répétitives. C'est un outil qui donnera envie à tout développeur Magento souhaitant se concentrer sur ce qui sera réellement la valeur ajoutée de son application.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.