Leçon 3: Créer un module sous prestashop
Grâce à ce tutoriel, vous allez vraiment pouvoir commencer à customiser et dynamiser votre e-commerce via la création de modules. Je vous décrirai toutes les étapes en détails, vous allez voir, c’est très simple !
EDIT : Je vous met maintenant à disposition un générator de module !
Je considère que vous avez déjà une boutique prestashop installé et que vous connaissez un minimum la structure de cette dernière. Si non, reportez-vous à la leçon 1 et la leçon 2.
1 – Création du module
Ici, nous travaillerons uniquement dans le dossier “module” situé à la racine de votre site.
Sous prestashop, un module est tout d’abord un dossier, c’est pourquoi nous allons commencer par en créer un dans le dossier modules où vous pouvez déjà apercevoir tout les modules déjà présents dans votre boutique. Nous l’appellerons “monmodule”.
Tout les fichiers nécessaires au fonctionnement de notre module devront être placés dans “monmodule”
Un module est une classe, étendue de la classe “Module”, cela peut paraître effrayant mais pas de panique, vous n’êtes pas obligé de maitriser la programmation orientée objet pour créer un module qui envoi du lourd
Créez un nouveau fichier php dans “monmodule” puis ouvrez le. Pour créer et éditer un fichier php je vous conseil Notepad++ si vous êtes sous Windows ou Coda si vous êtes sous Mac.
Insérez le code ci-dessous :
1 2 3 4 | class Monmodule extends Module { } |
Sauvegardez. Voilà, vous venez de créer votre premier module , bon évidemment, il n’est pas identifiable et ne sert à rien, vous pouvez tout de même l’apercevoir dans l’onglet module de l’administration.
2 – Configuration du module Nous allons maintenant ajouter plusieurs fonctions dans notre module. Il va falloir donner un nom à notre module, lui définir sa version, sa description ect.. Pour cela, ajouter la fonction “__construct()”
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Monmodule extends Module { function __construct() { $this->name = 'monmodule'; $this->tab = 'Mes modules'; $this->version = 0.1; $this->displayName = $this->l('Mon super module'); $this->description = $this->l('Description de mon super module'); parent::__construct(); } } |
- $this->name = ‘monmodule’;
Ici le nom de votre module : monmodule
- $this->tab = ‘Mes modules’;
Ici la catégorie de votre module : Mes modules ( ou aussi “Stats” ou “Blocks” en fonction de l’utilité de votre module )
- $this->version = 0.1;
Ici la version ( à titre indicatif )
- $this->displayName = $this->l(‘Mon super module’);
Ici le nom de votre module qui sera affiché dans la liste des modules.
- $this->description = $this->l(‘Description de mon super module’);
Ici une description courte de votre module
Sauvegarder. Rendez-vous dans l’onglet “Modules” de l’administration. Enfin ! on peut apercevoir votre module avec la configuration que nous avons établi. Si vous cliquez sur “installer”, rien ne se passera, votre module sera simplement considéré comme installé.
Pour exécuter des actions à l’installation ou la désinstallation du module,ajouter les fonctions suivantes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Monmodule extends Module{ function __construct() { $this->name = 'votremodule'; $this->tab = 'Mes modules'; $this->version = 0.1; $this->displayName = $this->l('Mon super module'); $this->description = $this->l('Description de mon super module'); parent::__construct(); } function install() { if (!parent::install()) return false; if (!$this->registerHook('top')) return false; return true; } public function uninstall() { if (!parent::uninstall()) return false; } } |
Ici, la fonction install() va installer votre module et l’enregistrer sur le hook “top”, allez dans l’onglet “positions” de la section “Modules”, après avoir installé votre module, vous verrez qu’il est enregistré sur la position “Top of pages”. Il existe plusieurs hook dans divers parties de votre site, tel que “leftColumn” , “rightColumn” ou footer.
La fonction unistall() va simplement désinstaller votre module.
Vous pouvez par exemple ajouter dans ces fonctions la création de table dans la base de donnée à l’installation ou la suppression lors de la désintallation.
Dans la liste des modules installés sur votre boutique, vous pouvez constater que certains d’entre eux sont configurable via un lien “>> Configurer”.
Pour implémenter cette fonctionnalitée à votre module, il suffit d’ajouter la fonction “getContent()” :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | class Monmodule extends Module{ function __construct() { $this->name = 'monmodule'; $this->tab = 'Mes modules'; $this->version = 0.1; $this->displayName = $this->l('Mon super module'); $this->description = $this->l('Description de mon super module'); parent::__construct(); } function install() { if (!parent::install()) return false; if (!$this->registerHook('top')) return false; return true; } public function uninstall() { if (!parent::uninstall()) return false; } public function getContent() { } } |
Dans cette fonction, ajoutez le code que vous souhaitez, je vous donne un petit exemple que vous pouvez essayer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public function getContent() { if (isset($_POST['submit'])){ if (!empty($_POST['lastname']) AND !empty($_POST['firstname'])) echo ' <h1>Bonjour '.$_POST['firstname'].' '.$_POST['lastname'].'</h1> '; else echo '<span class="warning" style="display: block;">Erreur : Veuillez entrer votre nom et prenom</span>'; } echo ' <fieldset> <legend> Administration du module : </legend> <form method="post"> Nom : <input name="lastname" type="text" /> Prenom : <input name="firstname" type="text" /> <input name="submit" type="submit" value="Envoyer" /> </form></fieldset> '; } |
Dernières fonctions utiles, celles qui vont s’exécuter lors de l’appel du hook correspondant à votre module.
1 2 3 | function hookTop($params){ return $this->display(__FILE__, 'monmodule.tpl'); } |
Ici nous utilisons la fonction hookTop car notre module est enregistré sur le hook “top”, vous pouvez voir qu’ici j’ai retourné un fichier tpl.
Grâce à cette fonction, dans la partie ‘Top of pages’ va s’afficher le code que vous aurez mis dans le fichier “monmodule.tpl”. Vous n’êtes cependant pas obligé d’utiliser ces fonctions si votre module ne sera pas utilisé pour afficher quelques chose dans votre site (comme un block par exemple).
Faites vos requêtes et vos assignations smarty dans cette fonction.
Si vous n’avez pas tout compris, n’hésitez pas à poser vos questions en laissant un commentaire ci-dessous
Je vous met ce module à disposition en téléchargement ici
Bonjour,
merci pour cette leçon bien claire !
j’avoue que Prestashop manque de tuto…
je suis pour une belle suite de tuto comme ça !
David
De rien
Bonjour,
Trés bon tuto (claire et facile) . je me demande si tu n’a pas oublié d’ajouter “Enseignant” à votre CV;
Ton site est maintenant dans mes favoris.
Merci
Merci à toi !
Merci Pour le tuto
Waw !! Merci pour tant de simplicité ! Page ajoutée aux favoris, naturellement
Bonjour
un grand merci pour ce tuto mais j’ai des question a poser:
-je me suis lancer dans le développement d’un module pour récupérer une liste des points relais mais je suis coincé dans l’étape de l’affichage des résultat récupérés, on m’a dit sur le forum de prestashop d’ajouter un hook a mon module alors j’ai ajouter une hook dans la table ps_hook et dans le fichier order .php (le hook s’affiche dans le déboguer) mais j’arrive pas a déterminer l’emplacement exacte pour ajouter le même nom du hook dans mon fichier module.php: dans la fonction install ou autre part?
merci d’avance
Bonjour,
Après avoir créer le hook, il faut créer une fonction dans le fichier php de votre module qui va permettre d’y rattacher ce dernier.
Exemple :
function hookTop($params){
return $this->display(__FILE__, ‘monmodule.tpl’);
}
Où hookTop devra être remplacé par le nom de votre module !
N’hésitez pas à relire mon article : Créer un module
En espérant vous avoir aidé
Bonjour,
Merci pour ce beau tutoriel !
Je pense qu’il serait judicieux de laisser à portée un zip de ce module de test afin que tout le monde puisse récupérer le code entier et le tester avant même d’avoir à y toucher : ) Cela pourrais en aider certains et éviter des problèmes de mal fonctionnement à cause d’un mauvais encodage ou un point-virgule oublié !
Bonne soirée
Très bonne idée, je vais mettre d’ici ce soir le module en téléchargement !
Merci
Pas de problème, Good job again !
Bonjour,
Est-ce compatible PS 1.4 ? Car je vois que les captures d’écran semblent faites sur une 1.3.
Merci pour ta réponse et super boulot !
bonjour ,
svp j’applique tous les démarches mais je trouve un problème ( Erreur(s) de parsing dans le(s) module(s)) que ce que je peux faire??
j’ai un problème je ne peut pas ajouter un bloc catégorie pour ajouter les sous catégorie dans cette nouvelle bloc
svp aide moi
Bonjour,
merci pour le tutorial, j’ai testé et pendant l’activation j’ai le message suivant ‘module non trouvé’.
Bonjour,
Tout d’abords merci pour ce site il est super, et le tuto rien à redire
Perso j’ai juste un petit problème, je voulais créer de petits modules avec une img et un lien vers externe….donc je suis parti du module blockadvertising du template prest_alt, modifié certaines données donc le module apparait bien dans la barre des modules avec un nom différent du module d’origine, l’installation ne pause pas de problème, mais rien ne s’affiche sur mon site en localhost… j’ai essayé de vider le cash mais même résultat.
Auriez-vous une petite astuce ?
Surement un problème de hook ?!
Vérifiez dans le sous-onglet “position” si votre module est bien positionné là où vous le souhaitez.
Bonjour,
Merci pour votre réponse, il apparaît dans le bon Hooks pourtant puisque j’ai reprise la base d’un module qui apparaît, et que je le vois même en utilisant le liveedit, je pense qu’il s’agir d’un pb de SQL pour charger l’image puisque j’ai pas paramétré la base… Je vais revoir cela ce soir
Ce serait sympa une petite rubrique partage sur le site où nous pourrions mettres nos travaux si ils sont utilent à la communauté.
Bingo
Simple problème de cache et css… ^o)
Bonjour, merci pour ces tutos
je viens de créer un module grâce au générateur de module, j’ai copier les fichiers générés dans le dossier ../module/monmodule
rien n’apparait dans l’onglet module du backend
merci
)
Tu as quelle version de perstashop ?
Bonjour
merci pour ce tuto.
je viens de creer mon module. j’ai mon interface de parametrage dans le backend, ok
cette interface contient un formulaire, mais je ne sais quoi faire avec le submit.
quel doit etre le parametre action du ?
comment doit on faire le update? et dans quel fichier ?
merci d’avance
)
Je te conseille de ne rien mettre dans l’attribut action ( pour que le formulaire soit envoyé sur la même page ).
Ton formulaire sera placé dans la fonction _displayForm().
Ensuite tu traite tes données dans la fonction getContent().
En espérant t’avoir éclairé
merci tu avais corrigé de toi même mes erreurs
)
je teste tout ça, mais attends toi à ce que je revienne à la charge
N’hésite pas !
Merci !!!!
ma partie admnistration de mon module fonctionne !!!
mais, parce qu’il y a toujours un mais,
je ne sais pas comment récupérer les données de ma Bd dans le fichier tpl. la balise {php} plante mon site
étrange non ?
merci d’avance
Il ne faut pas utiliser la balise {php}
Il faut, à partir de ton php, passer tes variables à smarty et ensuite les afficher dans le tpl.
Je te conseille vivement de lire mon article au sujet de smarty : http://emilienmalbranche.fr/prestashop-ecommerce-tutoriels/tutoriels/smarty-et-prestashop-comment-ca-marche/
oupsss :
il faut lire : quel doit être le paramètre action du formulaire ?
donc : le update dans le fichier appelé dans le formulaire je suppose ?
mais comment construire la commande?
Bonsoir!
J’ai réalisé la partie 1) de création d’un module, mais je ne l’aperçois pas dans l’onglet module de l’administration ???? J’ai raté une étape?
Vérifie le code, n’hésite à copier le contenu du fichier modules/monmodule/monmodule.php directement sur mon article. Cela devrait fonctionner.
Bon courage
Bonjour Emilien,
Merci beaucoup pour les tutos.
J’ai un grand problème sur mon site. La bannière est dans un format qui ne correspond pas à celle du thème que j’utilise. Donc, en gros, j’ai ma bannière à gauche qui a une largeur de 300px, à droite le “blockuserinfo” et en dessous un espace vide, que je voudrai combler avec quelque chose. J’ai posté le message sur le forum francophone de prestashop. Est ce que tu pourrai m’aider STP.
Merci d’avance
Connais-tu le langage CSS ?
un petit peu. Est ce que tu as compris mon souci? je suis sur que c’est un truc tout con et que je suis passé à côté comme un bleu
PS: C’est impressionnant que dans le forum francophone personne ne réponds, et toi qui doit être débordé, tu me réponds. merci beaucoup. D’ailleur je me suis inscrit sur ton site pour la formation et personne m’a encore contacté
Merci pour ce tuto qui m’a été très utile, j’ai pu créé mon module sans problème cela s’installe parfaitement, mais mon problème c’est que je ne sais pas comment l’utiliser dans mon site pour résumer le module est installé mais je sais pas comment faire pour l’inclure (afficher par exemple Bonjour nom ,prenom ) dans mon site j’espère que j’étais claire
Pour afficher le contenu du tpl du module sur le site, il faut utiliser les hook.
Pour utiliser un hook existant, exemple le hook de la pas d’accueil (home) il faut:
-greffer ton module sur le hook HomePage dans L’admin : Modules -> positions
-ajouter la fonction hookHome dans le code php du module qui va retourner l’affichage du tpl via la fonction $smarty->display()
Tu peux également créer un hook à la position de ton choix, pour ça suit mon tuto “créer un hook dans prestashop”
A mon merci pour ce tuto trouvé au hasard de mes recherches pour intégrer un diapo sur ma page d’accueil (je vais explorer le site maintenant) je rajouterais bien quelques échantillons de nos parfums sachant que nous les payons à noter fournisseur (plus de cadeau, c’est dire qu’ils sont précieux)
Bref j’en apprends plus ici en une page qu’en dix sur le forum
Merci
Un générateur de module Prestashop sympa : http://www.ebuildy.com/prestashop.php
Bonjour,
je n’arrive pas à afficher le module communiquer, pourtant je le vois dans ma liste de modules… mais rien ne s’affiche côté front office, une idée?
Vérifier:
- Le module est-il bien gréffé ?
- La fonction de correspondant au hook sur lequel il est greffé est elle bien présente dans le code du module ?
- Si oui, essayer de faire un echo ‘test’; dans la fonction de hook pour voir si quelque chose s’affiche sur le front.
- Si oui, le problème vient surement du fichier template.
bonjour,
j’ai un souci de creer un module, voila le message d’erreur
Le ou les modules suivants n’ont pu être chargés:
monmodule (classe manquante dans /modules/monmodule/monmodule.php)
merci pour votre aide
Bonjour,
Je commence le tuto, mais dès la création du fichier monmodule.php; le back office m’indique que le module n’a pu être chargé ?
J’utilise la version 1.4.7, y’a t’il un rapport ?
Sorry,
J’avais betement oublie la balise <?php
Bonjour,
J’ai copié le module que tu as mis en téléchargement.
Je l’ai placé ici :
“www/prestashop_test/modules/monmodule”
Il ne sse passe rien dans le backend.
Rien n’apparait.
Quand je vais dans l’administrateur backend dans :
“modules>positions”
et que je regarde dans
“Top of pages – 9 modules”
je ne vois pas “monmodule”, rien n’est changé
j’utilise la derniere version de prestashop 1.4.7
C’est normal docteur ?
Merci pour cette suite de tutos je vais peut être finir par y comprendre quelque chose.
Salut !
Vérifier les permissions sur le dossier du module et ses fichiers. Il doivent être en 755 !
@Francois : J’ai le meme probleme pourtant le dossier est en CHMOD 755.
Comme toi j’ai rien dans les modules.
J’ai écumé le forum ,le net pour voir si il ne s’agit pas d’un bug de la version 1.4.7.2.
Merci pour le tuto, quelques exemples clairs et bien choisis sont plus percutants que la doc officielle… que je respecte hautement bien sûr !
Bonjour, je suis auto didacte et j’aimerai savoir comment on crée un module diaporama pour mes futures themes
merci par avance
Bonjour,
je me permet de vous écrire pour vous poser une question.
Dans la fonction install vous ammenez le construct du parent après avoir traduit du texte avec la méthode l($string), n’est on pas sensé l’appelé avant?
Un autre tutoriel nous intimait de le faire, est-ce important?
Merci, ça fait plaisir ! Favoris maintenant!
Merci pour le tuto
c’est instructif.
Je suis novice, je voudrais rendre mon site plus sympa, en mettant en place une page d’accueil supplémentaire qui serait la vitrine de mon établissement ou je pourrais présenter mes produits.
Sur cette nouvelle page les personnes intéressées pourront créer leur compte afin de pouvoir accéder à la page existante de mon site marchand.
Comment dois-je faire ?
Merci pour votre réponse
Utile, concis, précis. Merci
Bonjour,
Objet: Presta 1.4.8.2, l’onglet BDD n’existe plus dans le module Admin.
J’ai démarré sur Prestabox et rapidement migré vers Prestashop. BOX m’a vendu mon backup, ce qui m’a évité une resaisie fastidieuse.
Lorsque j’ai repris le backup de mes fichiers créés sous PrestaBOX, je me suis aperçu que le sous onglet BDD avait disparu de l’onglet Préférences(Il n’existe pas dans la version PrestaBOX afin d’interdire l’accès aux données par FTP).
Si je load prestashop avec d’autres tables, le sous onglet BDD est visible dans l’onglet Préférence, mais si je restaure mon backup PrestaBOX, il disparaît à nouveau.
C’est pour cette raison, que je pense qu’un flag a été placé par les développeurs dans une table de PrestaBOX pour supprimer cet onglet (cela fait un moment que je cherche parmi les 229 tables, en vain).
Cordialement.
Daniel
Ps Merci et bravo pour vos artcles.
Je viens de m’abonner.
Bonjour,
Avez-vous tenté de regardé du coté des permissions ?
Votre compte est-il administrateur ?
Onglet “Employés” => “Permissions”
Bien cordialement,
Bonjour à tous,
J’ai trouvé la solution à cette anomalie: il suffit de remplacer le fichier ps_access fourni par le backup de Prestabox par le fichier ps_access récupéré dans la BDD de Prestashop. Tout bête mais difficile à trouver dans une BDD de 219 tables…
“Pour afficher le contenu du tpl du module sur le site, il faut utiliser les hook.
Pour utiliser un hook existant, exemple le hook de la pas d’accueil (home) il faut:
-greffer ton module sur le hook HomePage dans L’admin : Modules -> positions
-ajouter la fonction hookHome dans le code php du module qui va retourner l’affichage du tpl via la fonction $smarty->display()
Tu peux également créer un hook à la position de ton choix, pour ça suit mon tuto “créer un hook dans prestashop””
C’est bon, j’ai relis a la liste des commentaires et trololol.. j’ai trouver. Merci en tout cas !
Bonjour, super tutoriel, ceci n’a pas l’air d’actualité sur Prestashop 1.5.0. Les modules ne sont pas visibles en BO.
Avez-vous une solution ?
Ce tuto est-il valable pour la nouvelle version de Prestashop (1.5) ?
Bonjour je suis en train de créer un petit module qui affiche un slogan si le site est en français et si la langue diffère c’est un slogan anglais qui apparait. Le seul problème c’est qu’il m’affiche tout le temps le module en anglais.
Voici le code:
{if $language.iso_code != ‘fr’}
{else}
{/if}
(Code venant du fichier .tpl)
Merci d’avance =)
Par rapport à la langue j’ai trouvé ma solution comme un grand =D Pour ceux qui désire faire un sélecteur sur la langue procéder comme ceci :
{if $lang_iso != ‘fr’}
AUTRES
{else}
FR
{/if}
Bonjour, j’ai un sérieux problème dans la création du site d’une amie, je n’ai pas de connaissance en programmation et pas non plus sur prestashop, j’ai accepté d’aider cette personne qui n’en a pas non plus, hier soir en voulant customiser le site j’ai télécharger un module blockcms v1.5 qui s’est bien installé mais qui ne m’a pas donné les fonctions que j’attendais je l’ai alors supprimé. Mais en l’installant je me suis rendu compte qu’il avait pris la place du bloc CMS d’origine. Je suis sous prestashop 1.4.8.2 et je ne connais pas la version du bloc CMS par défaut sur cette version là. Le problème c’est que je ne pouvais plus gérer mes pages CMS ni en créer de nouvelles j’ai un message d’erreur qui s’affiche (une erreur s’est produite pendant la mise à jour cms (Unknown column ‘active’ in ‘field list’)). J’ai donc réinstaller la version du bloc CMS qui se trouve dans le pack prestashop 1.4.8.2 (autrement dit la version bloc CMS v1.1) mais le problème persiste, toujours le même message d’erreur et toujours aucune gestion des pages CMS disponible. Je suis bien embêter car en voulant aider mon amie je l’ai mise dans une situation embarrassante d’autant plus qu’elle devait lancer son activité dans ces jours-ci. C’est pourquoi je sollicite de votre bienveillance pour m’apporter l’aide nécessaire pour corriger ce bug. Très cordialement
Si vous avez remis l’ancienne version du module, pensez à effacer le cache du site dans les préférences de performance.
Merci pour la structure de module
Salut, Meeeeerci bcp pour ce tuto, très clair et facile.
Bonne continuation;
Bonjour
Votre générateur de module est-il compatible avec PS 1490 ?
La ligne de code Tools::addCSS avec assignation du ficher css n’est pas présent, normal ?
Merci
Bonjour,
Avant tout merci pour l’ensemble des cours / tuto de ce site !
Par rapport à celui ci, je souhaite créer un module pour faire un menu. Rien de bien compliqué, je souhaite seulement ajouter des id au balises de mon menu. Si je regarde le module de base de prestashop il y a une instanciation de l’utilisation de la base.
Pour la création d’un tel module, que conseillez vous:
- S’inspirer du menu de base et notamment de l’utilisation de la base de données ?
- Repartir de zéro avec un script un peu basique (requête sql, récupération des données, affichage avec un foreach) en php dans la fonction getContent() ?
Merci d’avance !
Bonjour,
Je viens de reprendre le site géré par prestashop de la boite dans laquelle je bosse et les 2 dernières catégories 5 gauche et 5 droite ne s’affichent pas sur la page du site ! Je les avais auparavant mis à la corbeille et je viens de les recréer. Quelqu’un aurait la gentillesse de m’aider ? Merci d’avance est-ce que l’on peut créer plus que 10 catégories ?
Bonjour,
Merci, merci, merci pour ces tuto super clairs et très utiles pour des néophytes comme moi.
J’ai voulu créer moi-même ma boutique, sans connaissance sur le sujet… et j’avoue que je patauge!!!
Mon dernier souci en date : l’intégration d’un module PAYBOX fourni par ma banque. Voilà 15 jours que j’y travaille et je crois que je vais craquer!
On me fournit un fichier “modulev2.cgi”, on me demande de créer un dossier “cgi-bin” à la source de mon ftp pour le classer… jusque là, tout va bien!!!
Par contre, impossible de savoir où, dans prestashop, se trouvent les outils qui me permettront d’installer le module!!!
Je ne souhaite pas doubler mon investissement en achetant le module spécifique sur prestashop… Il doit bien y avoir une solution non???
Pouvez-vous m’aider?
Merci
Bonjour,
Votre site est excellent et instructif. Merci.
J’essaie de faire produire un son des reception d’une commande. Je suis sous 1.4.8.3
Mes capacites de programmation sont limitees.
Merci d’avance
Woody
Est ce que ce tuto est compatible 1.5, il ne semble pas marcher si je copie le répertoire dans module.
très bon tuto, c’est très simple et très claire même un débutant pourra créer un module prestashop grâce à ces explications
vos explications son tellement simple et facile à comprendre, merci pour la leçon ça m’a énormément aider