Cet article fait partie de la série : Optimiser le développement de modules Prestashop

  1. Mise en place de l’environnement de développement
  2. Industrialiser l’installation de Prestashop et des modules
  3. Tester fonctionnellement vos modules avec Phpunit et Selenium
  4. Éviter les régressions avec l’intégration continue

Pour commencer notre série sur l’optimisation du développement des modules Prestashop, nous allons commencer par la mise en place de l’environnement de développement.

Si vous en avez la possibilité, travailler directement sous Linux apporte directement l’ensemble des fonctions qui sont disponibles sur votre serveur, sur votre poste de travail.
Si c’est déjà votre cas vous pouvez passer directement à la partie sur le versionning de vos sources.

Installer une machine virtuelle en local.

Si vous travaillez avec un environnement Windows vous avez sans doute déjà travaillé avec Wampserver.
Mais pour ma part je trouve que cette solution est à présent trop limitée, d’autant plus que l’installation des outils les plus pratiques actuellement ( git / composer … ) est plus compliquée sous l’ environnement windows.

C’est pourquoi nous allons installer une solution de virtualisation qui va nous permettre de disposer d’un serveur linux en local.

Nous allons nous baser pour cela sur les solutions VirtualBox et Vagrant,  les détails de l’installation sont accessibles sur l’article suivant  écrit il y’a quelques semaines :
https://www.h-hennes.fr/blog/2015/07/06/alternative-a-wampserver-vagrant/

Une fois la solution installée avec l’image scotchbox :
Initialisez le serveur via la commande

vagrant up

puis connectez vous via la commande

vagrant ssh

Nous sommes à présent connecté en ssh à notre serveur local
Rendez vous ensuite dans le dossier /var/www/

Créer un projet de test avec un gestionnaire de version

Nous allons créer un projet samplemodule

mkdir samplemodule

Puis nous placer dans ce répertoire

cd samplemodule

Pour gérer ses sources, plusieurs options sont possibles :

  • Dépot git local ( solution préconisée pour commencer )
  • Dépot git distant ( github / perso )
  • Dépot svn

Dépot git local

Avec un dépot git local, l’historique de vos sources sera uniquement disponible sur votre poste.
Il ne sera donc pas nécessaire d’avoir une connexion internet pour gérer votre historique,

Pour versionner vos sources avec git en local vous pouvez ensuite saisir la commande

git init .

Le message suivant est ensuite afficher pour vous confirmer que tout est bon.

Initialized empty Git repository in /var/www/samplemodule/.git/

Votre dépôt est initialisé.

Dépot git distant

Une connexion internet sera nécessaire pour initialiser le dépôt, et pour récupérer les dernières modifications distantes. Cette solution est à privilégier si vous penser travailler depuis plusieurs emplacements géographiques ( maison, travail … )

Pour initialiser le projet, il faut exécuter la commande git clone avec le chemin du dépôt ( que vous aurez préalablement créé )
Par exemple pour un compte github vous pouvez cloner le projet de test réalisé pour ce tutoriel
Remontez dans le dossier /var/www/ puis exécuter la commande

git clone https://github.com/nenes25/prestashop_samplemodule.git samplemodule

Votre dépot est initialisé

Dépot subversion ( svn )

Si vous souhaitez utiliser svn, il va être nécessaire d’installer les outils pour le gérer
Pour cela entrez la commande suivante :

sudo apt-get install subversion

Puis rendez vous dans le dossier samplemodule et initialiser votre dépot avec le chemin de votre dépot svn

svn checkout http://svn.yoursite.com/samplemodule/

Votre dépôt est initialisé.

Mise en place des outils de validation et de corrections des normes

Nous allons à présent installer php-cs-fixer qui va corriger automatiquement la mise en forme de notre code pour qu’il respecte les normes suggérées pour la solution.

Pour cela saisissez les commande suivantes

wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
sudo chmod a+x php-cs-fixer
sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

Php-cs-fixer est maintenant installé.

Pour tester son bon fonctionnement créer un fichier test.php dans votre dossier et insérez-y le contenu suivant :

<?php
 
$var1="test";
$var2="test2";
 
if ( $var1 == $var2)
echo "var egales";
else
echo "var differentes";
 
for($i=0;$i<5;$i++)
echo $i;
 
?>

Puis saisissez la commande suivante :

php-cs-fixer fix test.php --level=psr2

Ouvrez votre fichier, normalement son contenu doit être maintenant le suivant.
Le code respecte la convention psr2

<?php
 
$var1="test";
$var2="test2";
 
if ($var1 == $var2) {
echo "var egales";
} else {
echo "var differentes";
}
 
for ($i=0;$i<5;$i++) {
echo $i;
}

Interactions de php-cs-fixer à notre gestionnaire de version

Afin de nous libérer de la mise en forme de notre code, nous allons intégrer une commande qui va exécuter php-cs-fixer au hook pre-commit de notre gestionnaire de version.
De cette manière notre code sera corrigé automatiquement avant chaque publication, cela nous permettra donc de conserver un code de bonne qualité.

Pour activer le hook pre-commit, créer un fichier pre-commit dans le dossier .git/hooks/ de votre dossier

touch .git/hooks/pre-commit

Puis dans ce fichier nous allons mettre le code suivant

#!/bin/bash
 
#Recuperation des fichiers ajoute/cree/modifie dans le commit
LIST=$(git diff --name-only --cached --diff-filter=ACM)
 
#Chemin du projet
PROJECTROOT=`echo $(cd ${0%/*}/../../ &amp;&amp; pwd -P)`/
 
#code de retour
returncode=0
 
#Verification des fichiers avec php-cs-fixer
for file in $LIST
do
echo "Verification du fichier $PROJECTROOT$file"
php-cs-fixer fix --level=psr2 $PROJECTROOT$file
#On ajoute les changements du fichier
git add $file
done
 
exit 0

Nous disposons à présent des éléments nécessaires pour passer à la prochaine étape :
Industrialiser l’installation de Prestashop et des modules