Un module Prestashop, comment ca marche ?
Jan 19, 2015
Un module Prestashop, comment ca marche ?
Prestashop ?‡ Solution Open-Source
‡ PHP5/MySQL5
‡ Système de modules (PHP/Smarty)
Système de hooks‡ Points d’ancrage
‡ 85 hooks dans Prestashop 1.4.5
‡ On peut en rajouter grâce à la surcharge !
Structure des fichiers‡ Fichiers PHP
‡ Templates Smarty (.tpl)
‡ Feuilles de style, Javascript et
images
Surcharge
« On peut tout surcharger…
… sauf les fichiers
PHP ! »
Structure du code‡ Classe PHP
‡ Dérive de la classe Module
‡ Nom unique
Déclaration variables‡ Nécessaire si on veut les utiliser
plus tard
‡ Pré-remplies (ou pas) :public $variable_vide;public $variable_remplie = ‘valeur’;
Squelette d’un module‡ Des fonctions obligatoires :
O construct()O install()
‡ Des fonctions facultatives :O uninstall()O getContent()O displayForm()O hookX()
construct()‡ Utilisée à chaque exécution du
module
‡ Définit le module (nom, description,
etc)
‡ Remplit les variables du module et
effectue les opérations nécessaires
install()‡ Exécutée une seule fois
‡ Relie le module aux hooks
‡ Effectue toute opération nécessaire
(création de table, copie de fichiers,
etc.)
uninstall()‡ Facultative
‡ Exécutée au clic sur « Désinstaller »
‡ Effectue toute opération nécessaire
(suppression de table ou de fichiers,
etc.)
Hooks‡ Permettent de relier une action au
déclenchement d’un hook
‡ Peuvent s’appeler entre eux : A => B et
C => B
‡ Possible de les gérer via le B.O.
Fonctions communes‡ Permettent d’appeler une même
fonction depuis plusieurs hooks
‡ Allègent le code et le rendent +
lisible
Appels des templates‡ On indique le fichier à utiliser :
‡ Variables Smarty pré-remplies via
PHP…
…et récupérables dans les .tpl :
return $this->display(__FILE__, ‘module.tpl');
$smarty->assign(‘variable', $this->variable);
<p> {$variable} </p>
displayForm()‡ Utilisée pour le formulaire dans le
B.O.
‡ Pas d’affichage direct mais utilisation
de $output
‡ Pas de traitement des résultats
getContent()‡ Utilisée pour le traitement du formulaire
du B.O.
‡ Tout type d’opération (base de données,
etc)
‡ Affichage du résultat du traitement
Traduction‡ Pas de chaîne « en dur »
‡ Utilisation de $this->l(‘string’)
‡ Traduction via l’onglet dédié du B.O.
C’est qui, le barbu ?‡ Samy Rabih
Développeur PHP/JS
‡ O2Sources (Lyon)
‡ @fetard