{"id":1076,"date":"2015-08-20T15:55:44","date_gmt":"2015-08-20T13:55:44","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1076"},"modified":"2016-04-02T11:33:04","modified_gmt":"2016-04-02T09:33:04","slug":"optimiser-developpement-de-modules-prestashop-mise-en-place-de-lenvironnement-de-developpement","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/20\/optimiser-developpement-de-modules-prestashop-mise-en-place-de-lenvironnement-de-developpement\/","title":{"rendered":"Optimiser d\u00e9veloppement de modules Prestashop : Mise en place de l&rsquo;environnement de d\u00e9veloppement"},"content":{"rendered":"<div class=\"entete-serie\">Cet article fait partie de la s\u00e9rie : Optimiser le d\u00e9veloppement de modules Prestashop<\/p>\n<ol>\n<li><strong>Mise en place de l&rsquo;environnement de d\u00e9veloppement<\/strong><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/21\/optimiser-le-developpement-de-modules-prestashop-industrialiser-linstallation-de-prestashop-et-des-modules\/\">Industrialiser l&rsquo;installation de Prestashop et des modules<\/a><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/28\/optimiser-le-developpement-de-modules-prestashop-tester-fonctionnellement-vos-modules-avec-phpunit-et-selenium\/\">Tester fonctionnellement vos modules avec Phpunit et Selenium<\/a><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2016\/04\/02\/optimiser-le-developpement-de-modules-prestashop-eviter-les-regressions-avec-lintegration-continue\/\">\u00c9viter les r\u00e9gressions avec l&rsquo;int\u00e9gration continue<\/a><\/li>\n<\/ol>\n<\/div>\n<p>Pour commencer notre s\u00e9rie sur l&rsquo;optimisation du d\u00e9veloppement des modules Prestashop, nous allons commencer par la mise en place de l&rsquo;environnement de d\u00e9veloppement.<\/p>\n<p>Si vous en avez la possibilit\u00e9, travailler directement sous Linux apporte directement l&rsquo;ensemble des fonctions qui sont disponibles sur votre serveur, sur votre poste de travail.<br \/>\nSi c&rsquo;est d\u00e9j\u00e0 votre cas vous pouvez passer directement \u00e0 la partie sur le versionning de vos sources.<\/p>\n<p><strong>Installer une machine virtuelle en local.<\/strong><\/p>\n<p>Si vous travaillez avec un environnement Windows vous avez sans doute d\u00e9j\u00e0 travaill\u00e9 avec Wampserver.<br \/>\nMais pour ma part je trouve que cette solution est \u00e0 pr\u00e9sent trop limit\u00e9e, d&rsquo;autant plus que l&rsquo;installation des outils les plus pratiques actuellement ( git \/ composer &#8230; ) est plus compliqu\u00e9e sous l&rsquo; environnement windows.<\/p>\n<p>C&rsquo;est pourquoi nous allons installer une solution de virtualisation qui va nous permettre de disposer d&rsquo;un serveur linux en local.<\/p>\n<p>Nous allons nous baser pour cela sur les solutions VirtualBox et Vagrant,\u00a0 les d\u00e9tails de l&rsquo;installation sont accessibles sur l&rsquo;article suivant\u00a0 \u00e9crit il y&rsquo;a quelques semaines :<br \/>\n<a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/07\/06\/alternative-a-wampserver-vagrant\/\">https:\/\/www.h-hennes.fr\/blog\/2015\/07\/06\/alternative-a-wampserver-vagrant\/<\/a><\/p>\n<p>Une fois la solution install\u00e9e avec l&rsquo;image scotchbox :<br \/>\nInitialisez le serveur via la commande<\/p>\n<pre lang=\"bash\">vagrant up<\/pre>\n<p>puis connectez vous via la commande<\/p>\n<pre lang=\"bash\">vagrant ssh<\/pre>\n<p>Nous sommes \u00e0 pr\u00e9sent connect\u00e9 en ssh \u00e0 notre serveur local<br \/>\nRendez vous ensuite dans le dossier \/var\/www\/<\/p>\n<p><strong>Cr\u00e9er un projet de test avec un gestionnaire de version<\/strong><\/p>\n<p>Nous allons cr\u00e9er un projet <strong>samplemodule <\/strong><\/p>\n<pre lang=\"bash\">mkdir samplemodule<\/pre>\n<p><strong>Puis nous placer dans ce r\u00e9pertoire<\/strong><\/p>\n<pre lang=\"bash\">cd samplemodule<\/pre>\n<p>Pour g\u00e9rer ses sources, plusieurs options sont possibles :<\/p>\n<ul>\n<li>D\u00e9pot git local ( solution pr\u00e9conis\u00e9e pour commencer )<\/li>\n<li>D\u00e9pot git distant ( github \/ perso )<\/li>\n<li>D\u00e9pot svn<\/li>\n<\/ul>\n<p><strong> D\u00e9pot git local<\/strong><\/p>\n<p>Avec un d\u00e9pot git local, l&rsquo;historique de vos sources sera uniquement disponible sur votre poste.<br \/>\nIl ne sera donc pas n\u00e9cessaire d&rsquo;avoir une connexion internet pour g\u00e9rer votre historique,<\/p>\n<p>Pour versionner vos sources avec git en local vous pouvez ensuite saisir la commande<\/p>\n<pre lang=\"bash\">git init .<\/pre>\n<p>Le message suivant est ensuite afficher pour vous confirmer que tout est bon.<\/p>\n<pre lang=\"bash\">Initialized empty Git repository in \/var\/www\/samplemodule\/.git\/<\/pre>\n<p>Votre d\u00e9p\u00f4t est initialis\u00e9.<\/p>\n<p><strong>D\u00e9pot git distant<\/strong><\/p>\n<p>Une connexion internet sera n\u00e9cessaire pour initialiser le d\u00e9p\u00f4t, et pour r\u00e9cup\u00e9rer les derni\u00e8res modifications distantes. Cette solution est \u00e0 privil\u00e9gier si vous penser travailler depuis plusieurs emplacements g\u00e9ographiques ( maison, travail &#8230; )<\/p>\n<p>Pour initialiser le projet, il faut ex\u00e9cuter la commande <em>git clone<\/em> avec le chemin du d\u00e9p\u00f4t ( que vous aurez pr\u00e9alablement cr\u00e9\u00e9 )<br \/>\nPar exemple pour un compte github vous pouvez cloner le projet de test r\u00e9alis\u00e9 pour ce tutoriel<br \/>\nRemontez dans le dossier \/var\/www\/ puis ex\u00e9cuter la commande<\/p>\n<pre lang=\"bash\">git clone https:\/\/github.com\/nenes25\/prestashop_samplemodule.git samplemodule<\/pre>\n<p>Votre d\u00e9pot est initialis\u00e9<\/p>\n<p><strong>D\u00e9pot subversion ( svn )<\/strong><\/p>\n<p>Si vous souhaitez utiliser svn, il va \u00eatre n\u00e9cessaire d&rsquo;installer les outils pour le g\u00e9rer<br \/>\nPour cela entrez la commande suivante :<\/p>\n<pre lang=\"bash\">sudo apt-get install subversion<\/pre>\n<p>Puis rendez vous dans le dossier samplemodule et initialiser votre d\u00e9pot avec le chemin de votre d\u00e9pot svn<\/p>\n<pre lang=\"bash\">svn checkout http:\/\/svn.yoursite.com\/samplemodule\/<\/pre>\n<p>Votre d\u00e9p\u00f4t est initialis\u00e9.<\/p>\n<p><strong>Mise en place des outils de validation et de corrections des normes<\/strong><\/p>\n<p>Nous allons \u00e0 pr\u00e9sent installer <strong>php-cs-fixer<\/strong> qui va corriger automatiquement la mise en forme de notre code pour qu&rsquo;il respecte les normes sugg\u00e9r\u00e9es pour la solution.<\/p>\n<p>Pour cela saisissez les commande suivantes<\/p>\n<pre lang=\"bash\">wget http:\/\/get.sensiolabs.org\/php-cs-fixer.phar -O php-cs-fixer<\/pre>\n<pre lang=\"bash\">sudo chmod a+x php-cs-fixer<\/pre>\n<pre lang=\"bash\">sudo mv php-cs-fixer \/usr\/local\/bin\/php-cs-fixer<\/pre>\n<p>Php-cs-fixer est maintenant install\u00e9.<\/p>\n<p>Pour tester son bon fonctionnement cr\u00e9er un fichier test.php dans votre dossier et ins\u00e9rez-y le contenu suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n\r\n$var1=\"test\";\r\n$var2=\"test2\";\r\n\r\nif ( $var1 == $var2)\r\necho \"var egales\";\r\nelse\r\necho \"var differentes\";\r\n\r\nfor($i=0;$i&lt;5;$i++)\r\necho $i;\r\n\r\n?&gt;\r\n<\/pre>\n<p>Puis saisissez la commande suivante :<\/p>\n<pre lang=\"bash\">php-cs-fixer fix test.php --level=psr2<\/pre>\n<p>Ouvrez votre fichier, normalement son contenu doit \u00eatre maintenant le suivant.<br \/>\nLe code respecte la convention psr2<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n\r\n$var1=\"test\";\r\n$var2=\"test2\";\r\n\r\nif ($var1 == $var2) {\r\necho \"var egales\";\r\n} else {\r\necho \"var differentes\";\r\n}\r\n\r\nfor ($i=0;$i&lt;5;$i++) {\r\necho $i;\r\n}\r\n<\/pre>\n<p><strong>Interactions de php-cs-fixer \u00e0 notre gestionnaire de version<\/strong><\/p>\n<p>Afin de nous lib\u00e9rer de la mise en forme de notre code, nous allons int\u00e9grer une commande qui va ex\u00e9cuter php-cs-fixer au hook <strong>pre-commit<\/strong> de notre gestionnaire de version.<br \/>\nDe cette mani\u00e8re notre code sera corrig\u00e9 automatiquement avant chaque publication, cela nous permettra donc de conserver un code de bonne qualit\u00e9.<\/p>\n<p>Pour activer le hook pre-commit, cr\u00e9er un fichier pre-commit dans le dossier .git\/hooks\/ de votre dossier<\/p>\n<pre lang=\"bash\">touch .git\/hooks\/pre-commit<\/pre>\n<p>Puis dans ce fichier nous allons mettre le code suivant<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\n#Recuperation des fichiers ajoute\/cree\/modifie dans le commit\r\nLIST=$(git diff --name-only --cached --diff-filter=ACM)\r\n\r\n#Chemin du projet\r\nPROJECTROOT=`echo $(cd ${0%\/*}\/..\/..\/ &amp;&amp; pwd -P)`\/\r\n\r\n#code de retour\r\nreturncode=0\r\n\r\n#Verification des fichiers avec php-cs-fixer\r\nfor file in $LIST\r\ndo\r\necho \"Verification du fichier $PROJECTROOT$file\"\r\nphp-cs-fixer fix --level=psr2 $PROJECTROOT$file\r\n#On ajoute les changements du fichier\r\ngit add $file\r\ndone\r\n\r\nexit 0\r\n<\/pre>\n<p>Nous disposons \u00e0 pr\u00e9sent des \u00e9l\u00e9ments n\u00e9cessaires pour passer \u00e0 la prochaine \u00e9tape :<br \/>\n<strong><a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/21\/optimiser-le-developpement-de-modules-prestashop-industrialiser-linstallation-de-prestashop-et-des-modules\/\">Industrialiser l\u2019installation de Prestashop et des modules<\/a>\u00a0<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article fait partie de la s\u00e9rie : Optimiser le d\u00e9veloppement de modules Prestashop Mise en place de l&rsquo;environnement de d\u00e9veloppement Industrialiser l&rsquo;installation de Prestashop et des modules Tester fonctionnellement vos modules avec Phpunit et Selenium \u00c9viter les r\u00e9gressions avec l&rsquo;int\u00e9gration continue Pour commencer notre s\u00e9rie sur l&rsquo;optimisation du d\u00e9veloppement des modules Prestashop, nous allons [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[219,375,361,376,104,366],"class_list":["post-1076","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-developpement","tag-environnement","tag-modules","tag-php-cs-fixer","tag-prestashop","tag-vagrant"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=1076"}],"version-history":[{"count":9,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1076\/revisions"}],"predecessor-version":[{"id":1340,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1076\/revisions\/1340"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}