Top Banner
Ajouté par Documentation Team, modifié par Documentation Team le Mar 13, 2013 Table des matières Créer un module PrestaShop Qu'est-ce qu'un module PrestaShop ? Les principes techniques derrière un module Principes opératoires du module La structure des fichiers de PrestaShop Dossier du module À propos du cache Organiser votre module Créer un premier module Les méthodes install() et uninstall() L'objet Configuration L'objet Shop Le fichier d'icônes Apparence dans la page des modules À propos du fichier config.xml Implémenter des hooks Afficher du contenu Intégrer un template à un thème Utiliser Smarty Ajouter une page de configuration La méthode getContent() Afficher le formulaire Traduction du module En cas de problème Forums officiels de PrestaShop Notre bug-tracker Sites officiels de PrestaShop Qu'est-ce qu'un module PrestaShop ? L'extension se base sur les modules, qui sont des petits programmes qui exploitent les fonctionnalités de PrestaShop et les modifient ou les étendent afin de rendre PrestaShop plus facile à utiliser, plus complet ou plus personnalisé. Les principes techniques derrière un module Un module PrestaShop est compris de : un dossier racine, portant le même nom que le module, qui contient tous les fichiers du module et se trouve dans le dossier /modules de PrestaShop. un fichier PHP principal, portant le nom du module, placé à la racine de ce dossier. Ce fichier PHP doit avoir le même nom que le dossier du module. Deux fichiers icônes, afin de représenter le module dans le back-office : Un fichier pour PrestaShop 1.4 (si besoin) : logo.gif, 16*16 pixels. Un fichier pour PrestaShop 1.5 : logo.png, 32*32 pixels. Facultatif : un fichier template .tpl, contenant le thème du module. Facultatif : un fichier de langue, si le module ou son thème affichent des chaînes de texte (qui doivent, de fait, être traduites). Facultatif : dans un dossier /themes/modules, un dossier avec le même nom que le module, contenant les fichiers .tpl et de traduction si nécessaire. Ce dernier dossier est essentiel pendant les modifications d'un module existant, afin que vous puissiez l'adapter sans jamais à toucher ses fichiers originaux. Notamment, il vous permet de gérer l'affichage d'un module de différentes manières en fonction du thème actuel. Voyons un exemple avec le module PrestaShop blockuserinfo : Outils Créer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738 1 sur 24 19/03/2013 16:22
24
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Ajout par Documentation Team, modifi par Documentation Team le Mar 13, 2013

    Table des matires

    Crer un module PrestaShopQu'est-ce qu'un module PrestaShop ?

    Les principes techniques derrire un modulePrincipes opratoires du moduleLa structure des fichiers de PrestaShopDossier du module propos du cache

    Organiser votre moduleCrer un premier moduleLes mthodes install() et uninstall()L'objet ConfigurationL'objet ShopLe fichier d'icnesApparence dans la page des modules

    propos du fichier config.xmlImplmenter des hooks

    Afficher du contenuIntgrer un template un thme

    Utiliser SmartyAjouter une page de configuration

    La mthode getContent()Afficher le formulaire

    Traduction du moduleEn cas de problme

    Forums officiels de PrestaShopNotre bug-trackerSites officiels de PrestaShop

    Qu'est-ce qu'un module PrestaShop ?L'extension se base sur les modules, qui sont des petits programmes qui exploitent les fonctionnalits de PrestaShop et les modifientou les tendent afin de rendre PrestaShop plus facile utiliser, plus complet ou plus personnalis.

    Les principes techniques derrire un moduleUn module PrestaShop est compris de :

    un dossier racine, portant le mme nom que le module, qui contient tous les fichiers du module et se trouve dans le dossier/modules de PrestaShop.un fichier PHP principal, portant le nom du module, plac la racine de ce dossier. Ce fichier PHP doit avoir le mme nom quele dossier du module.Deux fichiers icnes, afin de reprsenter le module dans le back-office :

    Un fichier pour PrestaShop 1.4 (si besoin) : logo.gif, 16*16 pixels.Un fichier pour PrestaShop 1.5 : logo.png, 32*32 pixels.

    Facultatif : un fichier template .tpl, contenant le thme du module.Facultatif : un fichier de langue, si le module ou son thme affichent des chanes de texte (qui doivent, de fait, tre traduites).Facultatif : dans un dossier /themes/modules, un dossier avec le mme nom que le module, contenant les fichiers .tpl et detraduction si ncessaire. Ce dernier dossier est essentiel pendant les modifications d'un module existant, afin que vous puissiezl'adapter sans jamais toucher ses fichiers originaux. Notamment, il vous permet de grer l'affichage d'un module de diffrentesmanires en fonction du thme actuel.

    Voyons un exemple avec le module PrestaShop blockuserinfo :

    Outils

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    1 sur 24 19/03/2013 16:22

  • Tout module PrestaShop, une fois install sur une boutique en ligne, peut interagir avec des "hooks", ou "point d'accroche". Un hookvous permet "d'accrocher" du code votre Vue actuelle au moment de l'analyse du code (ex. : lors de l'affichage du panier ou de lafiche produit, lors de l'affichage du stock actuel...). Plus spcifiquement, un hook est un raccourci vers les diffrentes mthodesdisponibles au sein de l'objet Module, telles qu'assignes ce hook.

    Principes opratoires du moduleLes modules sont la voie idale pour laisser votre talent et votre imagination de dveloppeur s'exprimer, tant les possibilits crativessont nombreuses.

    Ils peuvent afficher une grande varit de contenu (graphiques, textes, animations...), lancer de nombreuses tches (mise jour parlot, import, export, etc.), s'interfacer avec d'autres outils.

    Les modules peuvent tre aussi configurables que ncessaires ; plus ils sont configurables, plus ils seront facile utiliser, et serontdonc en mesure de correspondre un plus grand nombre d'utilisateurs.

    L'un des principaux intrts des modules et d'ajouter des fonctionnalits PrestaShop sans devoir modifier ses fichiers coeur, ce quisimplifie grandement la mise jour du logiciel sans devoir recopier toutes ces modifications. De fait, vous devriez faire en sorte de nejamais modifier les fichiers de PrestaShop lorsque vous concevez un module, mais si cela peut se rvler compliqu dans certainessituations.

    La structure des fichiers de PrestaShopLes dveloppeurs de PrestaShop ont fait de leur mieux pour sparer les diffrentes parties du logiciel de manire claire et intuitive.

    Voici comment les dossiers sont organiss :

    /admin : contient tous les fichiers de PrestaShop relatifs au back-office. Si vous cherchez accder ce dossier l'aide devotre navigateur, il vous sera demand de vous authentifier, pour des raisons de scurit. Important : faites en sorte que cedossier reste protger par des fichiers .htaccess et .htpasswd./cache: contient des dossiers temporaires qui sont gnrs et rutiliss afin d'allger la charge du serveur./classes : contient tous les fichiers relatifs au modle Objet de PrestaShop. Chaque fichier reprsente (et contient) une classePHP, et ses mthodes et proprits./config : contient tous les fichiers de configuration de PrestaShop. Ne modifiez jamais ces fichiers, sauf on vous le demandeexpressment, car ils sont grs directement par l'installateur et le back-office de PrestaShop./controllers : contient tous les fichiers relatifs aux contrleurs de PrestaShop (dans le cadre Modle-Vue-Contrleur (ouMVC), l'architecture logicielle sur laquelle repose PrestaShop. Chaque fichier contrle une partie prcise de PrestaShop./css : contient tous les fichiers CSS qui ne sont pas lis aux thmes ; de fait, ils sont la plupart du temps utiliss par leback-office de PrestaShop./docs : contient un peu de documentation. Note : vous devriez les effacer dans un environnement de production./download : contient tous vos produits numriques, pouvant tre tlchargs : fichiers PDFs, MP3s, etc./img : contient toutes les images par dfaut de PrestaShop, c'est dire celles qui n'appartiennent pas au thme. C'est ici quevous trouverez les sous-dossiers des images pour les catgories de produits (/c, celles des produits (sous-dossier /p) et cellepour le back-office lui-mme (sous-dossier /admin)./install : contient tous les fichiers relatifs l'installateur de PrestaShop. Vous devriez l'effacer aprs installation, afind'amliorer la scurit./js : contient tous les fichiers JavaScript qui ne sont pas lis aux thmes. La plupart appartiennent au back-office. C'estgalement ici que vous trouverez le framework jQuery./localization : contient tous les fichiers de localisation de PrestaShop c'est dire, les fichiers qui contiennent desinformations locales, comme la monnaie, la langue, les rgles de taxes et les groupes de rgles de taxes, les tats et autresunits utilises dans le pays choisi (par exemple, le volume en litre, le poids en kilogrammes, etc.)./log : contient les fichiers de log gnrs par PrestaShop lors de diverses tapes, par exemple pendant le processusd'installation.

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    2 sur 24 19/03/2013 16:22

  • /mails : contient tous les fichiers HTML et textes relatifs aux e-mails envoys par PrestaShop. Chaque langue dispose de sonpropre dossier, o vous pouvez modifier manuellement ce que vous souhaitez./modules : contient tous les modules de PrestaShop, chacun dans son propre dossier. Si vous souhaitez enlever dfinitivementun module, commencez par le dsinstaller depuis le back-office, puis effacez son dossier la main./override : il s'agit d'un dossier particulier, apparu partir de la version 1.4 de PrestaShop. En utilisant la convention denommage de dossier et fichiers de PrestaShop, il devient possible de crer des fichiers qui supplantes les classes et contrleurspar dfaut de PrestaShop. Cela vous permet de modifier le comportement fondamental de PrestaShop sans toucher aux fichiersoriginaux, ce qui les garde intact en prvision de la prochaine mise jour./themes : contient tous les thmes actuellement installs, chacun dans son propre dossier./tools : contient les outils externes qui ont t intgr PrestaShop. Par exemple, c'est ici que vous trouverez Smarty (moteurde thme), FPDF (gnrateur de fichiers PDF), Swift (expditeur d'e-mails), PEAR XML Parser (outil PHP)./translations : contient un sous-dossier pour chaque langue. Cependant, si vous souhaitez modifier les traductions, vousdevez utiliser l'outil interne de PrestaShop, et surtout ne pas les modifier directement dans ce dossier./upload : contient les fichiers qui ont t mis en ligne par les clients pour personnaliss vos produits (par exemple, une image imprimer sur un mug)./webservice : contient les fichiers qui permettent aux applications tierces de se connecter PrestaShop, au travers de sonAPI.

    Dossier du moduleLes modules de PrestaShop sont le plus souvent situs dans le dossier /modules, qui se trouve la racinedu dossier principal de PrestaShop. C'est le cas tant pour les modules par dfaut (fournis avec PrestaShop)et les modules tiers qui seront installs par la suite.Les modules peuvent galement tre inclus dans un thme s'ils lui sont vraiment spcifiques. Dans ce cas,ils se trouveraient dans le sous-dossier /modules du dossier de ce thme, et seraient donc localiss dansle chemin /themes/nom-du-theme/modules .

    Chaque module dispose de son propre sous-dossier au sein du dossier /modules: /bankwire,/birthdaypresent, etc.

    propos du cacheLe fichier /cache/Class_index.php contient le lien entre la classe et le fichier de dclaration. Il peut treeffac sans crainte.

    Le dossier /cache/xml contient la liste de tous les modules de base.

    Lorsque le front-end de la boutique ne correspond pas vos modifications, et que le fait de vider le cachedu navigateur n'amliore pas les choses, vous pouvez essayer de vider ces dossiers :

    /cache/smarty/cache/cache/smarty/compile

    Organiser votre moduleUn module peut tre compos de nombreux fichiers, tous stocks dans le fichier qui porte le mme nom que le module, ce dossiertant son tour situ dans le dossier /modules la racine du dossier de PrestaShop.

    Les fichiers et dossiers par dfaut d'un module PrestaShop 1.5 sont :

    Le fichier de dmarrage : nom_du_module.phpLe fichier de configuration du cache : config.xmlLes contrleurs spcifiques au module, stocks dans le dossier /controllersLes classes de surcharge, stockes dans le dossier /override (installation et dsinstallation automatique par copie ou parfusion du code)Les fichiers de vue (templates, JavaScript, CSS, etc.). partir de la v1.5, ces fichiers peuvent tre placs dans cessous-dossiers :

    dossier /views/css pour les fichiers CSSdossier /views/js pour les fichiers JavaScriptdossier /views/templates/front pour les fichiers utiliss par les contrleurs du moduledossier /views/templates/hooks pour les fichiers utiliss par les hooks du module

    Logo du module en 16x16 : nom_du_module.jpg (format JPG ou GIF)Logo du module en 32x32 : name_om_du_module.png (format PNG)Fichiers de traduction : fr.php, en.php, es.php, etc. partir de la v1.5, tous ces fichiers peuvent tre placs dans le dossier

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    3 sur 24 19/03/2013 16:22

  • /translations .

    Crer un premier moduleCrons donc un premier module simple ; il nous permettra de mieux apprcier sa structure. Nous l'appellerons "My module".

    Tout d'abord, crez le dossier du module. Il fois avoir le mme nom que le module, avec aucune espace, seulement des caractresalphanumriques, le tiret et le caractre soulign "_", tous en en minuscule : /mymodule.

    Ce dossier doit contenir le fichier de dmarrage ("bootstrap file"), un fichier PHP du mme nom que le dossier du module, quis'occupera de la plupart des traitements : mymodule.php.

    C'est suffisant pour un module trs simple, mais de toute vidence de nombreux autres fichiers et dossiers peuvent tre ajouts.

    Par exemple, la partie visible (front-office) du module est dfinie dans des fichiers .tpl placs dans un dossier spcifique : /views/templates/front/ . Les fichiers template peuvent prendre n'importe quel nom. S'il n'y en a qu'un seul, une bonne pratiqueconsiste lui donner le mme nom que le dossier et le fichier principal : mymodule.tpl.

    Dans le cadre de tutoriel, le module sera attach la colonne de gauche via un hook. De fait, les fichiers templates appels par cehook devront tre placs dans le dossier /views/templates/hook/ afin de fonctionner.

    Dans PrestaShop 1.4, les fichiers template du module pouvaient tre placs la racine du dossier du module.

    Pour des raisons de compatibilit, les fichiers template peuvent toujours se trouver la racine de ce dossier avec PrestaShop,mais les sous-dossiers de /views/templates sont dsormais favoriser. Si vous souhaitez que votre module fonctionnegalement pour PrestaShop 1.4, vous devriez conserver ces fichiers la racine du dossier.

    Le fichier principal, mymodule.php, doit commencer avec le test suivant :

    Nous testons ici l'existence d'une constante propre PrestaShop, et stopper l'excution en cas d'absence. Son seul intrt est doncd'viter qu'un visiteur peut scrupuleux puisse lancer le fichier directement.

    Ce fichier doit galement, et surtout, contenir la classe principale du module. PrestaShop utilise la programmation oriente Objet, etses modules galement.

    Cette classe doit porter le mme nom que le module et son dossier, en CamelCase (lire http://fr.wikipedia.org/wiki/CamelCase) :MyModule.De plus, cette classe doit tendre la classe Module, afin d'hriter de ses mthodes et attributs. Elle peut tout aussi bien tendre l'unedes classes drives de Module pour des besoins spcifiques : PaymentModule, ModuleGridEngine, ModuleGraph...

    mymodule.php

    Vous pouvez ds maintenant placer le dossier du module dans le dossier /modules de PrestaShop ; votre module sera dj visibledans la page "Modules" du back-office, dans la section "Autres modules".

    Remplissons maintenant notre classe avec les lignes de dmarrage essentielles :

    if (!defined('_PS_VERSION_')) exit;

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    4 sur 24 19/03/2013 16:22

  • mymodule.php

    Examinons chaque ligne de cette premire version de la classe MyModule.

    Cette ligne dclare la fonction constructeur de notre classe.

    Cette assigne une poigne d'attributs l'instance de la classe (this) :

    attribut 'name'. Cet attribut sert d'identifiant interne, donc faites en sorte qu'il soit unique, sans caractres spciaux ni espaces,et gardez-le en minuscule. Dans les fais, la valeur DOIT tre le nom du dossier du module.attribut 'tab'. Cet attribut donne l'identifiant de la section de la liste des modules du back-office de PrestaShop o devra setrouver ce module. Vous pouvez utiliser un nom existant, tel que seo, front_office_features ou analytics_stats, ouun identifiant personnalis. Dans ce dernier cas, une nouvelle section sera crer avec votre identifiant. Nous avons choisi"front_office_features" parce que ce module aura surtout un impact sur le front-end.Voici la liste des attributs "Tab" et leurs sections respectives dans la page "Modules" :

    Attribut "tab" Section du module

    administration Administration

    advertising_marketing Publicit et marketing

    analytics_stats Statistiques & analyses

    billing_invoicing Facturation

    checkout Processus de commande

    content_management Gestion de contenu

    emailing Envoi d'e-mails

    export Export

    front_office_features Fonctionnalits front-office

    public function __construct()

    $this->name = 'mymodule';$this->tab = 'front_office_features';$this->version = '1.0';$this->author = 'Firstname Lastname';

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    5 sur 24 19/03/2013 16:22

  • Attribut "tab" Section du module

    i18n_localization Internationalisation et localisation

    market_place Places de march

    merchandizing Merchandizing

    migration_tools Outils de migration

    mobile Mobile

    others Autres modules

    payments_gateways Paiements

    payment_security Scurit des paiements

    pricing_promotion Scurit des paiements

    quick_bulk_update Modifications rapides / de masse

    search_filter Recherche et filtres

    seo Rfrencement - SEO

    shipping_logistics Transporteur & logistique

    slideshows Diaporamas

    smart_shopping Guides d'achat

    social_networks Rseaux sociaux

    attribut 'version'. Le numro de version du module, affich dans la liste des modules. C'est une chane, donc vous pouvezutiliser des variations comme "1.0b", "3.07 beta 3" ou "0.94 (not for production use)".attribut 'author'. Le nom de l'auteur est affich dans la liste des modules de PrestaShop.

    Continuons avec le bloc de code suivant :

    Cette section gre les relations entre le module et son environnement (donc, PrestaShop) :

    Le drapeau need_instance indique s'il faut charger la classe du module quand celui-ci est affich dans la page "Modules" duback-office. S'il est 0, le module n'est pas charg, et il utilisera donc moins de ressources. Si votre module doit afficher unavertissement dans la page "Modules", alors vous devez passer ce drapeau 1.ps_version_compliancy est un nouveau drapeau de PrestaShop 1.5. Il permet d'indiquer clairement les versions dePrestaShop avec lesquelles le module est compatible. Dans l'exemple ci-dessus, nous indiquons explicitement que ce modulene fonctionnera qu'avec la version 1.5, et aucune autre.dependencies est un nouveau drapeau de PrestaShop 1.5. Il permet d'indiquer clairement que le module a besoin del'activation d'un autre module afin de fonctionnement correctement. Votre module peut se avoir besoin de fonctionnalits misesen place par l'autre module, ou il peut simplement tre un ajout utile qui n'aurait aucun sens sans cet autre module. Utiliser ledossier du module comme identifiant. Dans notre exemple, notre module requiert l'activation du module Blockcart.

    Nous faisons ensuite appel au parent du constructeur :

    Cet appel doit tre fait aprs la cration de $this->name et avant toute utilisation de la mthode $this->l().

    La section suivante met en place les premires chanes du module, encapsules dans la fonction de traduction l():

    $this->need_instance = 0;$this->ps_versions_compliancy = array('min' => '1.5', 'max' => '1.5'); $this->dependencies = array('blockcart');

    parent::__construct();

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    6 sur 24 19/03/2013 16:22

  • Chacune de ces lignes assigne un lment :

    un nom pour le module, qui sera affich dans la liste des modules du back-office.une description pour le module, qui sera affich dans la liste des modules du back-office.un message demandant l'administrateur s'il souhaite rellement dsinstaller ce module.un avertissement que le module n'a pas dfini sa variable MYMODULE_NAME (ce dernier point est spcifique notre exemple).

    Notre mthode constructeur est maintenant complte, et le module est visible dans la page "Module" quand vous la rechargez, avecquelques premires informations. Cependant, en cliquant sur le bouton "Install", rien ne se passe. Il reste des mthodes ajouter.

    Les mthodes install() et uninstall()Ces deux mthodes vous permettent de contrle ce qu'il se passe quand l'administrateur de la boutique installe ou dsinstalle lemodule, pour par exemple vrifier les rglages de PrestaShop ou enregistrer ses propres rglages dans la base de donnes. Ellesdoivent faire partie de la classe principale du module (dans notre exemple, la classe MyModule).

    Dans cette premire incarnation trs simple, cette mthode fait le minimum requis : renvoyer la valeur renvoye par la mthodeinstall() de la classe Module, qui renvoie soit true si le module est correctement install, soit false dans le cas contraire. Notezque si nous n'avions pas cr cette mthode, la mthode install() de la classe parente aurait de toute faon t appele, ce quidonne le mme rsultat.Cependant, nous devons mentionner cette mthode, car elle se montrera trs utile une fois que nous aurons mettre en place destests et actions lors du processus d'installation du module : cration de tables SQL, cration de variables de configuration, etc.

    Il est possible d'ajouter autant des lignes install() que ncessaires. Dans l'exemple suivant, nous lanons les tches suivantes encours de l'installation :

    vrifier que le module est install.lier le module au hook leftColumn.lier le module au hook header.crer la variable de configuration MYMODULE_NAME, en lui donnant la valeur "my friend".

    Si une seule de ces lignes choue, l'installation n'a pas lieu.

    De son ct, la mthode d'installation supprime simplement la variable de configuration MYMODULE_NAME.

    $this->displayName = $this->l('My module');$this->description = $this->l('Description of my module.'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); if (!Configuration::get('MYMODULE_NAME')) $this->warning = $this->l('No name provided');

    public function install(){ return (parent::install());} // Ceci marche galement et est plus prenne : public function install(){ if (parent::install() == false) return false; return true;}

    public function install(){ if (Shop::isFeatureActive()) Shop::setContext(Shop::CONTEXT_ALL); return parent::install() && $this->registerHook('leftColumn') && $this->registerHook('header') && Configuration::updateValue('MYMODULE_NAME', 'my friend'); }}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    7 sur 24 19/03/2013 16:22

  • Si votre module cre effectivement des donnes SQL, que ce soit dans ses propres tables MySQL ou dans l'une des tables ps_existantes, alors il faut imprativement que vous mettiez en place un processus de suppression de ces donnes dans la mthodesuninstall(). Cette mthode pourrait alors ressembler ceci :

    L'objet ConfigurationComme vous pouvez le voir, nos trois blocs de code utilisent un nouvel objet, Configuration. Il s'agit d'un objet propre PrestaShop, conu pour aider les dveloppeurs stocker les rglages dans la base de donnes de PrestaShop sans devoir grer leurspropres tables. Plus prcisment, cet objet utilise la table ps_configuration.

    Jusqu'ici nous avons utilis trois de ses mthodes, auxquelles nous allons ajouter une quatrime :

    Configuration::get('maVariable') : rcupre une valeur spcifique depuis la base de donnes.Configuration::getMultiple(array('maPremiereVariable', 'maSecondeVariable','maTroisiemeVariable')) : rcupre plusieurs valeurs de la base de donnes, et renvoie un tableau PHP.Configuration::updateValue('maVariable', $value) : met jour une variable existant dans la base de donnes enlui donnant une nouvelle valeur. Si cette variable n'existe pas dj, elle sera cre pour l'occasion.Configuration::deleteByName('myVariable') : supprimer la variable de la base de donnes.

    Il y en a de nombreuses autres, comme getInt() ou hasContext(), mais les quatre prsentes sont celles que vous utiliserez leplus souvent.Comme vous pouvez le voir, c'est un objet trs utile et trs facile utiliser, et vous y aurez certainement recours dans de nombreusessituations. La plupart des modules s'en servent pour leurs propres rglages.

    Vous n'tes pas limit vos propres variables : PrestaShop stocke galement tous ses rglages de configuration dans la tableps_configuration. Des centaines de rglages s'y trouvent, et vous pouvez y accder aussi facilement que vous accder auxvtres. Par exemple :

    Configuration::get('PS_LANG_DEFAULT') : rcupre l'identifiant de la langue par dfaut.Configuration::get('PS_TIMEZONE') : rcupre le nom du fuseau horaire, au format standard TZ (voir :http://en.wikipedia.org/wiki/List_of_tz_database_time_zones).Configuration::get('PS_DISTANCE_UNIT') : rcupre l'unit de distance par dfaut ("km" pour les kilomtres, etc.).Configuration::get('PS_SHOP_EMAIL') : rcupre l'adresse e-mail de contact principale.Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : rcupre le nombre de jours durant lesquels un produitrcemment ajout est considr comme tant "Nouveau" par PrestaShop.

    Plongez-vous dans la table ps_configuration afin de dcouvrir de nombreux autres rglages.

    Notez que lorsque vous utilisez updateValue(), le contenu de $value peut tre ce que vous voulez : une chane, un nombre, untableau PHP srialis ou un objet JSON. partir du moment o votre code peut grer correctement ce type de donnes, toutconviendra. Par exemple, voici comme grer un tableau PHP avec l'objet Configuration :

    public function uninstall(){ return parent::uninstall() && Configuration::deleteByName('MYMODULE_NAME');} // ...qui est simplement une manire plus courte d'crire ceci : public function uninstall(){ if (!parent::uninstall() || !Configuration::deleteByName('MYMODULE_NAME')) return false; return true;}

    public function uninstall(){ if (!parent::uninstall()) Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'mymodule`'); parent::uninstall();}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    8 sur 24 19/03/2013 16:22

  • L'objet ShopDeux autres lignes de la mthode install() sont comme suit :

    L'objet Shop est une nouveaut de PrestaShop 1.5, qui vous permet de grer la fonctionnalit multiboutique. Sans plonger dans lesdtails, nous allons simplement vous prsenter les deux mthodes qui sont utilises dans ce code d'exemple :

    Shop::isFeatureActive() : cette ligne teste simplement si la fonctionnalit multiboutique est active ou non, et si au moinsdeux boutiques sont actuellement actives.Shop::setContext(Shop::CONTEXT_ALL) : cette ligne modifier le contexte pour appliquer les changements qui suivent toutes les boutiques existantes plus qu' la seule boutique actuellement utilise.

    Le contexte est une autre fonctionnalit apparue avec PrestaShop 1.5. Il est expliqu en dtail dans le chapitre "Utiliser l'objet Context".

    Le fichier d'icnesPour parfaire ce premier module, nous pouvons ajouter une icne, qui sera affich ct du nom du module dans la liste des modules.Dans le cas o le module utilise officiellement un service web connu, le fait d'utiliser le logo de se service comme icne apporte uneplus grande confiance en votre module.Assurez-vous de ne pas utiliser un logo dj utilis par un module natif.

    Le fichier d'icne doit respecter le format suivant :

    plac dans le dossier principal du module.Pour fonctionner avec PrestaShop 1.4 :

    Image en 16*16.Format GIF.Nomm logo.gif.Suggestion : le jeu d'icne gratuit Silk de FamFamFam est probablement ce qu'il se fait de mieux :http://www.famfamfam.com/lab/icons/silk/.

    Pour fonctionner avec PrestaShop 1.5 :Image en 32*32.Format PNG.Nomm logo.png.Suggestion : il existe de nombreuses bibliothques d'icnes 32*32 gratuites. En voici quelques-unes :http://www.fatcow.com/free-icons (trs proche de celle de FamFamFam) ou http://www.jonasraskdesign.com/downloads/downloads.html (Danish Royalty Free).

    Apparence dans la page des modulesMaintenant que toutes les bases sont en place, rechargez la page "Modules" du back-office et trouvez votre module dans la section"Fonctionnalits front-office". Installez-le (ou rinitialisez-le s'il est dj install).

    Lors de l'installation, PrestaShop cre automatiquement un fichier config.xml dans le dossier du module, qui stocke les informationsde configuration. Vous devez tre trs prudent lorsque vous dcidez de le modifier.

    PrestaShop ajoute galement une ligne dans la table ps_module.

    // Stocker un tableau srialis.Configuration::updateValue('MYMODULE_SETTINGS', serialize(array(true, true, false))); // Rcuprer le tableau.$configuration_array = unserialize(Configuration::get('MYMODULE_SETTINGS'));

    if (Shop::isFeatureActive()) Shop::setContext(Shop::CONTEXT_ALL);

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    9 sur 24 19/03/2013 16:22

  • propos du fichier config.xmlLe fichier config.xml permet d'optimiser le chargement du module dans la liste des modules.

    Quelques dtails:

    is_configurable indique que le module a une page de configuration ou non.need_instance indique qu'une instance du module doit tre crer lorsque s'affiche la liste des modules. Cela peut se rvlerutile lorsque le module doit raliser des tests sur la configuration de PrestaShop, et afficher des notifications en fonction dursultat.limited_countries est utilis pour indiquer les pays auxquels le module est limit. Par exemple, si le module doit tre limit la France et l'Espagne, utilisez fr,es.

    Implmenter des hooksEn tant que tel, notre module ne fait pas grand-chose. Afin d'afficher du contenu sur le front-office, nous devons ajouter le support pourquelques hooks, ce qui se fait dans la mthode install()... comme nous l'avons donn en exemple un peu plus tt dans ce chapitre,avec la mthode registerHook() :

    Comme vous pouvez le voir, nous faisons en sorte que le module est li aux hooks "leftColumn" et "header". En plus de cela, nousallons ajouter du code pour le hook "rightColumn".

    Le fait d'attacher de code un hook requiert des mthodes spcifiques pour chaque hook :

    hookDisplayLeftColumn() : attachera du code l a colonne de gauche dans notre cas, nous allons rcuprer le rglagede module MYMODULE_NAME et afficher le fichier template mymodule.tpl, qui se trouve dans le dossier /views/templates/hook/.hookDisplayRightColumn() : fera de mme que hookDisplayLeftColumn(), mais en l'appliquant la colonne dedroite.hookDisplayHeader() : ajoutera un lien vers le fichier CSS du module, /css/mymodule.css

    mymodule Are you sure you want to uninstall? You will lose all your settings! 0 0

    public function install(){ if (Shop::isFeatureActive()) Shop::setContext(Shop::CONTEXT_ALL); return parent::install() && $this->registerHook('leftColumn') && $this->registerHook('header') && Configuration::updateValue('MYMODULE_NAME', 'my friend'); }}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    10 sur 24 19/03/2013 16:22

  • En plus de cela, nous utiliserons le Contexte pour changer une variable Smarty : la mthode assign() permet de donner une valeur la variable MYMODULE_NAME stocke dans la table de configuration de la base de donnes.

    Le hook header n'est pas un en-tte visuel, mais nous permet d'ajouter du code entre les balises du fichier HTML rsultant.C'est surtout utile pour les fichiers JavaScript et CSS. Pour ajouter dans l'en-tte un lien vers notre fichier CSS, nous utilisons lamthode addCSS(), qui gnre la bonne balise vers le fichier indiqu en paramtre.

    Enregistrez votre fichier, et vous dj vous pouvez accrocher le template de votre module au thme, le dplacer et le transplanter : allerdans la page "Position" du menu "Modules" du back-office, et cliquez sur le bouton "Greffer un module" (en haut droite de la page).

    Dans le formulaire de greffe :

    Trouvez "Mon module" dans la liste droulante "Module".1.Choisissez "Left column blocks" dans la liste droulante "Greffer le module sur".2.Enregistrez vos modifications.3.

    Il est inutile d'attacher un module un hook pour lequel le module ne dispose pas de mthode implmente.

    La page "Positions" devrait alors se recharger, en affichant le message suivant "Le module a bien t greff sur le point d'accrocher".Flicitations ! Faites dfiler la page, et vous devriez effectivement voir votre module parmi ceux affich dans la liste "Left columnblocks". Dplacez-le vers le haut de la liste en faisant un glisser-dposer de la ligne du module.

    public function hookDisplayLeftColumn($params){ $this->context->smarty->assign( array( 'my_module_name' => Configuration::get('MYMODULE_NAME'), 'my_module_link' => $this->context->link->getModuleLink('mymodule', 'display') ) ); return $this->display(__FILE__, 'mymodule.tpl');} public function hookDisplayRightColumn($params){ return $this->hookDisplayLeftColumn($params);} public function hookDisplayHeader(){ $this->context->controller->addCSS($this->_path.'css/mymodule.css', 'all');}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    11 sur 24 19/03/2013 16:22

  • Le module est maintenant est attach la colonne de gauche... mais sans aucun modle afficher, nous sommes loin d'avoir quoiquece soit d'utile sur la page d'accueil : si vous la rechargez, vous noterez que la colonne de gauche affiche simplement un message l ole module devrait se trouver, disant "No template found for module mymodule".

    Afficher du contenuMaintenant que nous avons accs la colonne de gauche, nous pouvions y afficher ce que nous voulons.

    Comme dit plus, le contenu afficher dans le thme doit tre dans fichier de template .tpl. Nous allons donc crer le fichiermymodule.php, qui sera pass en paramtre de la mthode display() dans le code de notre module, avec la mthodehookDisplayLeftColumn(). Lorsque l'on appelle un template depuis un hook, PrestaShop cherche ce fichier template dans ledossier de templates /views/templates/hook/ (dans le dossier du module), que vous devez crer vous-mme.

    Voici notre fichier template, situ dans /views/templates/hook/mymodule.tpl :

    mymodule.tpl

    C'est tout simplement du code HTML... avec quelques appels Smarty :

    L'appel {l s='xxx' mod='yyy'} est une mthode propre PrestaShop qui enregistre la chane dans le panneau detraduction du module. Le paramtre s est pour la chane, tandis que le paramtre mod doit contenu l'identifiant du module (dansle cas prsente, "mymodule"). Nous n'utilisons cette mthode qu'une fois dans cet exemple pour des raisons de lisibilit, maisdans les faits il faudrait l'appliquer absolument toutes les chanes.Les dclarations {if}, {else} et {/if} sont des conditions Smarty. Dans notre exemple, nous vrifions que la variableSmarty $my_module_name existe bien (grce la mthode Smarty isset()) et qu'elle n'est pas vide. Si tout est commeattendu, nous affichons le contenu de cette variable. Sinon, nous affichons "World", afin d'obtenir "Hello World!"La variable {$my_module_link} dans l'attribut href : il s'agit d'une variable Smarty que nous allons bientt crer, et quidonne accs au dossier racine de PrestaShop.

    Welcome! Hello, {if isset($my_module_name) && $my_module_name} {$my_module_name} {else} World {/if} ! Click me!

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    12 sur 24 19/03/2013 16:22

  • the {$base_dir} variable in the link's href attribute: this is a Smarty variable created by PrestaShop, which providesdeveloper with access une autre page du module que nous aurons dfinie.

    En parallle, nous allons crer un fichier CSS, et allons l'enregistrer en tant que /css/mymodule.css dans le dossier du module (outout autre sous-dossier o vous souhaitez placer vos fichiers CSS) :

    Enregistrez le template dans le dossier /views/templates/hook/ et le fichier CSS dans le dossier /css/, recherchez la paged'accueil de votre boutique : le contenu de votre template devrait apparatre en haut de la colonne de gauche, juste sous le logo de laboutique (si vous avez effectivement dplac le module en premire position du hook "Left Column" lors de sa greffe).

    Comme vous pouvez le voir, le thme applique ses propres CSS au template que nous avons cr :

    Notre titre devient l'en-tte du bloc, styl de la mme manire que pour les autres titres.Notre bloc a le mme style que les autres blocs sur la page.

    Ce n'est pas trs joli, mais cela fonctionne comme nous le souhaitons.

    Dsactiver le cache

    Si vous avez suivi ce tutoriel la lettre et que vous ne voyez toujours rien s'afficher dans la colonne de gauche de votre thme, celpeut tre d au cache de PrestaShop, qui conserve les versions prcdentes de vos templates et continue de vous les servir tellesquelles. C'est pourquoi vous voyez toujours la version originale du thme, sans vos changements.

    Smarty met en cache une version compile de votre page d'accueil, pour des questions de performance. C'est extrmement utile ples sites en production, mais gnant pour les sites en phase de test, o vous tes amen recharg trs rgulirement la paged'accueil afin de voir l'impact de vos modifications.

    Lorsque vous modifiez ou dboguez le thme d'un site de test, vous devriez toujours dsactiver le cache, afin de forcer Smarty recompiler les templates chaque chargement.Pour ce faire, rendez-vous dans le menu "Paramtres avancs", ouvrez la page "Performances", et dans la section "Smarty" :

    Cache des templates. Choisissez "Forcer la compilation chaque appel".Cache. Dsactivez-le.Console de dbogage. Vous pouvez galement faire s'ouvrir la console si vous voulez en apprendre plus sur le fonctionneminterne de Smarty.

    Ne dsactivez jamais le cache sur un site en production, ni n'activez la console de dboguage, car cela ralentirait tout !Vous devriez toujours raliser vos tests sur un site part, idalement install sur votre propre ordinateur plutt qu'en ligne.

    div#mymodule_block_left p { font-size: 150%; font-style:italic;}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    13 sur 24 19/03/2013 16:22

  • Intgrer un template un thmeLe lien que le module affiche ne mne nulle part pour le moment. Crons le fichier display.php qu'il cible, avec un contenu minimal,et mettons-le la racine du dossier du module.

    display.php

    Cliquez sur le lien "Click me!" : la page rsultante ne sera que du texte brut, sans rien qui rappelle le thme de la boutique. Nousaimerions pourtant que ce texte soit affich au sein du thme, donc faisons quelques modifications.

    Comme l'on peut s'y attendre, nous devons crer un fichier template afin d'utiliser la mise en forme du thme. Crons doncdisplay.tpl, qui contiendra notre simple ligne "Welcome to my shop!", et sera appel par le fichier display.php. Nous allons parailleurs rcrire ce fichier display.php pour en faire un contrleur front-end, afin d'intgrer correctement notre template trs basiqueau milieu des lments du thme : en-tte, pied de page, colonnes, etc.

    Vous devriez vous assurer de donner des noms explicites vos fichiers template, afin de pouvoir les retrouver facilement dansvotre back-office ce qui est indispensable une fois que vous devez l'outil de traduction.

    Voici nos deux fichiers :

    display.php

    display.tpl

    Explorons display.php, notre premier contrleur front-end PrestaShop, plac dans le sous-dossier /controllers/front dudossier du module :

    Un contrleur front-end doit tre une classe qui tend la classe ModuleFrontController.Ce contrleur doit avoir une mthode : initContent(), qui doit appeler la mthode iniContent() de la classe parente......qui appelle ensuite la mthode setTemplate() avec notre fichier display.tpl.

    La mthide setTemplate() s'occupera d'intgrer notre template ne contenant qu'une ligne, et d'en faire un page complte, avecen-tte, pied de page et colonnes.

    Jusqu' PrestaShop 1.4, les dveloppeurs qui souhaitaient intgrer un fichier template dans le thme du site devaient utiliserdes appels include() pour chaque portion de la page. Voici le code 1.4 de notre display.php ci-dessus :

    display.php

    Comme vous pouvez le voir, cela n'est plus ncessaire avec PrestaShop 1.5 : vous pouvez et mme devriez utiliser uncontrleur front-end, et le contrleur (Contrleur) et son template (Vue) devraient avoir le mme nom : display.php est li

    Welcome to this page!

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    14 sur 24 19/03/2013 16:22

  • display.tpl.

    Enregistrez les deux fichiers dans leurs dossiers respectifs, et rechargez la page d'accueil, puis cliquez sur le lien "Click me!", et vouspouvez voir que vote lien fonctionne comme attendu. Avec juste quelques lignes, le rsultat final est dj beaucoup mieux, la ligne"Welcome" tant maintenant place au milieu de l'interface.

    Ce n'est l qu'une premire tape, mais elle vous donne une ide de ce qu'il est possible de faire si vous suivez les rgles detemplates.

    Utiliser SmartySmarty est un moteur de template. C'est celui utilis par le systme de thme de PrestaShop. Il s'agit d'un projet libre et open-source,hberg http://www.smarty.net/.

    Il parcourt les fichiers .tpl, la recherche d'lments dynamiques remplacer par leurs quivalents contextuels, pour envoyer aunavigateur le rsultat gnrique. Ces lments dynamiques sont marqus par des accolades : { ... }. Les dveloppeurs peuventcrer leurs propres variables. PrestaShop ajoute ses propres variables.

    Par exemple, nous pouvons crer la variable $my_module_message en PHP directement dans la mthodehookDisplayLeftColumn(), et la faire s'afficher par notre fichier template.

    mymodule.php

    Partant de l, nous pouvons demander Smarty d'afficher le contenu de cette variable dans notre fichier TPL.

    mymodule.tpl

    PrestaShop ajoute ses propres variables. Par exemple, {$hook_left_column} sera remplac par le contenu de la colonne degauche, ce qui signifie le contenu de tous les modules qui ont t attachs au hook de la colonne de gauche.

    Toutes les variables de Smarty sont globales. Vous devriez donc faire attention ce que vos propres noms de variables n'utilisent pasle nom d'une variable Smarty existante, afin d'viter qu'elle ne la remplace. Une bonne pratique consiste viter les noms trop simples,comme {products}, et de les prfixer avec le nom de votre module, voire mme avec votre propre nom ou vos initiales :{$henryb_mymodule_products}.

    Voici une liste de variables Smarty communes toutes les pages :

    Fichier/ dossier Description

    img_ps_dir URL for PrestaShop's image folder.

    img_cat_dir URL for the categories images folder.

    img_lang_dir URL for the languages images folder.

    img_prod_dir URL for the products images folder.

    img_manu_dir URL for the manufacturers images folder.

    img_sup_dir URL for the suppliers images folder.

    public function hookDisplayLeftColumn($params){ $this->context->smarty->assign( array( 'my_module_name' => Configuration::get('MYMODULE_NAME'), 'my_module_link' => $this->context->link->getModuleLink('mymodule', 'display'), 'my_module_message' => $this->l('This is a simple text message') // Ne pas oublier de mettre la chane dans la mthode de traduction l() ) ); return $this->display(__FILE__, 'mymodule.tpl');}

    {$my_module_message}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    15 sur 24 19/03/2013 16:22

  • Fichier/ dossier Description

    img_ship_dir URL for the carriers (shipping) images folder.

    img_dir URL for the theme's images folder.

    css_dir URL for the theme's CSS folder.

    js_dir URL for the theme's JavaScript folder.

    tpl_dir URL for the current theme's folder.

    modules_dir URL the modules folder.

    mail_dir URL for the mail templates folder.

    pic_dir URL for the pictures upload folder.

    lang_iso ISO code for the current language.

    come_from URL for the visitor's origin.

    shop_name Shop name.

    cart_qties Number of products in the cart.

    cart The cart.

    currencies The various available currencies.

    id_currency_cookie ID of the current currency.

    currency Currency object (currently used currency).

    cookie User cookie.

    languages The various available languages.

    logged Indicates whether the visitor is logged to a customer account.

    page_name Page name.

    customerName Client name (if logged in).

    priceDisplay Price display method (with or without taxes...).

    roundMode Rounding method in use.

    use_taxes Indicates whether taxes are enabled or not.

    Il y a de nombreux hooks contextuels. Si vous avez besoin d'afficher toutes les variables de la page en cours, utiliser l'appel suivant :

    Les commentaires sont signals par des astrisques :

    Au contraire des commentaires HTML, le code Smarty comment n'apparat pas dans le fichier final.

    Ajouter une page de configurationVotre module peut avoir un lien "Configurer" dans la liste des modules du back-office, et donc permettre l'utilisateur de modifierquelques rglages. Ce lien "Configurer" apparat avec l'addition de la mthode getContent() dans la classe principale. C'est unemthode PrestaShop standard : sa seule prsence envoie au back-office un message indique qu'il y a une page de configuration, etdonc que le lien "Configurer" devrait tre affich.

    {debug}

    {* This string is commented out *} {*This string is too!*}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    16 sur 24 19/03/2013 16:22

  • Mais le fait d'avoir une mthode getContent() publique dans la classe MyModule ne fait qu'afficher ce lien ; elle ne cre pas la pagede configuration elle-mme. Nous allons donc vous expliquer comme la crer, afin d'y placer un formulaire permettant de modifier lavariable de configuration MYMODULE_NAME qui est stocke dans la table ps_configuration.

    La mthode getContent()Tout d'abord, voici le code complet pour notre mthode getContent() :

    La mthode getContent() est la premire tre appele quand la page de configuration est charge. Ainsi, nous l'utilisons toutd'abord pour mettre jour toute valeur qui aurait pu tre soumise par le biais du formulaire contenu dans la page :

    Voici une explication ligne ligne :

    Tools::isSubmit() est une mthode propre PrestaShop, qui vrifie si le formulaire indiqu a bien t valid.Dans ce cas, si le formulaire de configuration, le bloc if() entier est saut et PrestaShop ne lit que la dernire ligne, qui affichele formulaire de configuration avec les valeurs actuelles, tel que gnr par la mthode displayForm().

    1.

    Tools:getValue() est une mthode propre PrestaShop, qui rcupre le contenu du tableau POST ou GET pour en tirer lavaleur de la variable indique.Dans ce cas, nous rcuprons la valeur de MYMODULE_NAME du formulaire, transformons sa valeur en une chane l'aide de lamthode strval(), et la stockons dans la variable PHP $my_module_name.

    2.

    Nous vrifions ensuite l'existence de vritable contenu dans $my_module_name, notamment en utilisantValidate::isGenericName().L'objet Validate contient de nombreuses mthodes de validation, parmi lesquelles se trouve isGenericName(), unemthode qui vous aide vrifier qu'une chane est bien un nom de variable PrestaShop valide c'est--dire qu'elle ne contientpas de caractres spciaux, pour simplifier.

    3.

    Si ces tests chouent, le formulaire de configuration s'ouvre avec un message d'erreur, indiquant que la validation du formulairea chou.La variable $output, qui contient le rendu final du code HTML qui compose la page de configuration, affiche en premier lieu unmessage d'erreur, cr l'aide de la mthode displayError(). Cette mthode renvoie le code HTML ncessaire nos besoins, ettant qu'il est le premier insr dans $output, cela signifie que la page s'ouvrira avec ce message.

    4.

    Si ces tests russissent, cela signifie que nous pouvons stocker la valeur dans la base de donnes.Comme nous l'avons vu plus tt dans ce tutoriel, l'objet Configuration a exactement la mthode dont nous avons besoin :updateValue() stockera la nouvelle valeur pour MYMODULE_NAME dans la table de configuration.Pour cela, nous ajoutons une notification l'utilisateur, indiquant que la valeur a bien t mise jour : nous utilisons la mthodedisplayConfirmation() de PrestaShop, qui le message en premier dans la variable $output et donc, en haut de lapage.

    5.

    Enfin, nous utilisons la mthode displayForm() (que nous allons crer et expliquer dans la section suivante) pour ajouter ducontenu $output (que le formulaire a t valid ou non), et renvoyons ce contenu dans la page.Notez que que nous aurions pu inclure le code de displayForm() directement dans getContent(), mais que nous avonschoisi de sparer les deux pour des questions de lisibilit et de sparation des intrts.

    6.

    Ce type de code de validation de formulaire n'est pas une nouveaut pour les dveloppeurs PHP, mais il utilise certaines des mthodesPrestaShop que vous utiliserez le plus.

    public function getContent(){ $output = null; if (Tools::isSubmit('submit'.$this->name)) { $my_module_name = strval(Tools::getValue('MYMODULE_NAME')); if (!$my_module_name || empty($my_module_name) || !Validate::isGenericName($my_module_name)) $output .= $this->displayError( $this->l('Invalid Configuration value') ); else { Configuration::updateValue('MYMODULE_NAME', $my_module_name); $output .= $this->displayConfirmation($this->l('Settings updated')); } } return $output.$this->displayForm();}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    17 sur 24 19/03/2013 16:22

  • Afficher le formulaireLe formulaire de configuration lui-mme est affich par la mthode displayForm(). Voici son code, que nous expliquerons ensuite.

    premire vue, il s'agit surtout d'un norme bloc de code pour ne changer qu'une seule valeur. Mais ce bloc utilise plusieurs desmthodes de PrestaShop qui vous aideront construire vos formulaires, notamment l'objet HelperForm.

    Plonger dans displayForm()

    Parcourons cette mthode :

    l'aide de la mthode Configuration::get(), nous rcuprons la valeur de la langue par dfaut ("PS_LANG_DEFAULT").Pour des questions de scurit, nous faisons en sorte que la variable soit un entier en utilisant (int).

    1.

    public function displayForm(){ // Get default Language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Settings'), ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Configuration value'), 'name' => 'MYMODULE_NAME', 'size' => 20, 'required' => true ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['MYMODULE_NAME'] = Configuration::get('MYMODULE_NAME'); return $helper->generateForm($fields_form);}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    18 sur 24 19/03/2013 16:22

  • Afin de prparer la gnration du formulaire, nous construisons un tableau des titres, champs et autres spcificits deformulaire.Pour ce faire, nous crons la variable $fields_form, qui contient tableau multidimensionnel. Chaque tableau qu'il contientprsente une description dtaille des balises que le formulaire contient. partir de cette variable, PrestaShop pourra gnrer leformulaire HTML tel que dcrit.Dans notre exemple, nous dfinissons trois balises (, et ) et leurs attributs l'aide de tableau. Leformat est simple comprendre : les tableaux de la lgende et du bouton contiennent les attributs de chaque balise, tandis quele champ texte contient autant de champ que ncessaire, chacun tant son tour dcrit en tableau contenant lesattributs ncessaires. Par exemple :

    ...gnre les balises HTML suivantes :

    Comme vous pouvez le voir, PrestaShop utilise tout cela intelligemment, et gnre tout le code ncessaire l'obtention d'unformulaire utile.Notez que la valeur du tableau principal est utilise plus loin dans le code, au sein du code permettant de gnrer le formulaire.

    2.

    Nous crons ensuite la classe HelperForm. Cette section du code est explique dans la prochaine section de ce chapitre.3.Une fois que les rglages de HelperForm sont en place, nous gnrons le formulaire partir de la variable $fields_form.4.

    Utiliser HelperForm

    HelperForm est l'une des mthodes d'aide ajoute PrestaShop, en mme temps que HelperOptions, HelperList,HelperView et HelperHelpAccess. Ces mthodes permettent de gnrer des lments HTML standard pour le back-office, ainsique les pages de configuration des modules.Vous pouvez obtenir plus d'information sur les classes Helper dans le chapitre "Helper" du guide du dveloppeur, qui dispose d'unepage ddie HelperForm.

    Pour rappel, voici notre code :

    'input' => array( array( 'type' => 'text', 'label' => $this->l('Configuration value'), 'name' => 'MYMODULE_NAME', 'size' => 20, 'required' => true ))

    Configuration value

    *

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    19 sur 24 19/03/2013 16:22

  • Notre exemple utilise plusieurs attributs de HelperForm : ils doivent tre mis en place avant que nous ne lancions la gnration duformulaire partir de la variable $fields_form :

    $helper->module : requiert une instance du module qui utilisera les donnes du formulaire.$helper->name_controller : requiert le nom du module.$helper->token : requiert un jeton (token) unique et propre au module. getAdminTokenLite() en gnre un pour vous.$helper->currentIndex :$helper->default_form_language : requiert la langue par dfaut de la boutique.$helper->allow_employee_form_lang : requiert la langue par dfaut de la boutique.$helper->title : requiert le titre du formulaire.$helper->show_toolbar : requiert un boolen indiquant si la barre d'outils est affiche ou non.$helper->toolbar_scroll : requiert un boolen indiquant si la barre d'outils est visible lors du dfilement ou non.$helper->submit_action : requiert l'attribut d'action de la balise du formulaire.$helper->toolbar_btn : requiert les boutons qui seront affichs dans la barre d'outils. Dans notre exemple, les boutons"Save" et "Back".$helper->fields_value[] : c'est ici que nous pouvons dfinir la valeur de la balise nomme.

    Enfin, aprs avoir mis tout ceci en place, nous pouvons appeler la mthode generateForm(), qui se chargera de combiner toutesces informations et, comme son nom l'indique, de gnrer le formulaire que l'utilisateur utilisera pour modifier les rglages du module.

    Voici le rendu du formulaire tel qu'actuellement crit comme vous pouvez le voir vous-mmes en cliquant sur le lien "configurer" dumodule dans le back-office :

    Modifiez la valeur comme vous le souhaitez, cliquez sur le bouton "Save" et rechargez la page d'accueil : votre module devraiteffectivement afficher une chane diffrente !

    Traduction du moduleLes chanes du module sont crites en anglais, vous pourriez vouloir que vos les propritaires de boutiques franais, espagnols ou

    $helper = new HelperForm(); // Module, Token and currentIndex$helper->module = $this;$helper->name_controller = $this->name;$helper->token = Tools::getAdminTokenLite('AdminModules');$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language$helper->default_form_language = $default_lang;$helper->allow_employee_form_lang = $default_lang; // title and Toolbar$helper->title = $this->displayName;$helper->show_toolbar = true; // false -> remove toolbar$helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen.$helper->submit_action = 'submit'.$this->name;$helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') )); // Load current value$helper->fields_value['MYMODULE_NAME'] = Configuration::get('MYMODULE_NAME'); return $helper->generateForm($fields_form);

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    20 sur 24 19/03/2013 16:22

  • polonais puissent galement utiliser le module. Vous devez donc traduire ces chanes dans ces diffrentes langues, que ce soit pourles chanes du back-office comme celles du front-office. Idalement, vous devriez traduire votre module dans l'ensemble des languesdisponibles sur votre boutique. Cela peut s'avrer tre une tche laborieuse, mais Smarty et l'outil de traduction de PrestaShop voussimplifient au maximum la tche.

    Les chanes des fichiers PHP doivent tre affiches l'aide de la mthode l(), qui provient de la classe abstraite Module, et est doncdisponible au sein de tous les modules.

    mymodule.php (partial)

    Les chanes des fichiers TPL doivent tre transformes en contenu dynamique, que Smarty remplacera par la traduction dans lalangue choisie. Dans notre exemple, le fichier mymodule.tpl...

    mymodule.tpl (partial)

    ...devient...

    mymodule.tpl (partial)

    ...et le fichier display.tpl...

    ...$this->displayName = $this->l('My module');$this->description = $this->l('Description of my module.');...

    Click me!

    {l s='Welcome!' mod='mymodule'} Hello, {if isset($my_module_name) && $my_module_name} {$my_module_name} {else} World {/if} ! Click me!

    {l s='Click me!' mod='mymodule'}

    {l s='Welcome!' mod='mymodule'} {if !isset($my_module_name) || !$my_module_name} {capture name='my_module_tempvar'}{l s='World' mod='mymodule'}{/capture} {assign var='my_module_name' value=$smarty.capture.my_module_tempvar} {/if} {l s='Hello %1$s!' sprintf=$my_module_name mod='mymodule'} {l s='Click me!' mod='mymodule'}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    21 sur 24 19/03/2013 16:22

  • display.tpl

    ...devient...

    display.tpl

    Traduire du code complexe

    Comme vous pouvez le voir, la base de la traduction d'un fichier template consiste placer ses chanes dans le bon appelSmarty : {l s='The string' mod='name_of_the_module'}. Les modifications des textes pour les titres et liens desfichiers display.tpl et in mymodule.tpl sont donc faciles comprendre. Mais nous avons ajout un bloc de code plusconsquent pour la chane "Hello World" : une condition if/else/then, et une variable de texte. Explorons ce code.

    Voici le code original :

    Comme vous pouvez le voir, nous devons rendre la chane "Hello World!" traduisible, mais galement prendre en compte lefait qu'il y a une variable. Comme expliqu dans le chapitre "Les traductions dans PrestaShop 1.5", les variables doivent tremarques l'aide de marqueurs sprintf(), tels que %s ou %1$s.

    Il est facile de rendre "Hello %s!" traduisible : nous devons simplement mettre ce code en place :

    Mais dans notre cas, nous devons galement faire en sorte que %s soit remplac par "World" dans le cas o"my_module_name" n'existe pas... et nous devons rendre "World" galement traduisible. Cela peut se faire en utilisant lafonction {capture} de Smarty, qui rcupre la valeur de sortie au lieu de l'afficher, afin de l'utiliser plus tard. Nous l'utiliseronspour remplacer la variable avec le mot "World" s'il se trouvait que cette mme variable tait vide ou absente, l'aide d'unevariable temporaire. Voici le code final :

    Notez que nous utilisons toujours le paramtre mod. Il est utilis par PrestaShop pour vrifier quel module une chane appartient.L'outil de traduction en a besoin pour faire correspondre une chane sa traduction. Ce paramtre est obligatoire pour les chanes demodules.

    Les chanes sont dlimites par des apostrophes droites. Si une chane contient des apostrophes, elles devraient tre chappes parun antislash (\).

    Ainsi, les chanes peuvent tre traduites directement dans PrestaShop :

    Rendez-vous dans la page "Traductions", dans le menu "Localisation".Dans la liste droulante de la section "Modifier la traduction", choisissez "Traduction des modules installs"Cliquez sur le drapeau du pays dont la langue correspond celle dans laquelle vous voulez traduire le module. La langue dedestination doit tre dj installe dans PrestaShop.

    La page qui se charge alors affiche les chanes de tous les modules actuellement installs. Les modules qui ont dj leurs chanestraduites ont leurs sections fermes, tandis que ceux qui ont au moins une chane non traduite ont leur section ouverte.Pour traduire les chanes de votre module (celles que vous avez marqu avec la mthode l()), trouvez simplement votre module dansla liste (utiliser la recherche de votre navigateur) et remplissez les champs vides.

    Welcome to this page!

    {l s='Welcome to this page!' mod='mymodule'}

    Hello, {if isset($my_module_name) && $my_module_name} {$my_module_name} {else} World {/if}!

    {l s='Hello %s!' sprintf=$my_module_name mod='mymodule'}

    {if !isset($my_module_name) || !$my_module_name} {capture name='my_module_tempvar'}{l s='World' mod='mymodule'}{/capture} {assign var='my_module_name' value=$smarty.capture.my_module_tempvar}{/if}{l s='Hello %s!' sprintf=$my_module_name mod='mymodule'}

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    22 sur 24 19/03/2013 16:22

  • Une fois toutes les chanes de votre module correctement traduites, cliquez sur le bouton "Enregistrer les modifications" en haut de lapage.

    PrestaShop enregistre alors votre traduction dans un nouveau fichier, nomm sous la forme codeDeLaLangue.php (par exemple,/mymodule/fr.php). Le fichier de traduction ressemble ceci :

    fr.php

    Ce fichier ne doit pas tre modifi la main ! Elle ne peut tre modifie qu'en passant par l'outil de traduction de PrestaShop.

    Maintenant que nous avons une traduction franaise, nous pouvons cliquer sur le drapeau franais, et obtenir les rsultats attendus :les chanes du module sont maintenant en franais.

    Elles sont galement traduites en franais dans le back-office.

    En cas de problmeSi le module ne fonctionne pas comme attendu, voici quelques possibles solutions.

    Forums officiels de PrestaShopRejoignez nos forums l'adresse http://www.prestashop.com/forums/, et cherchez-y une rponse votre question en tapant lesmots-clefs. Si vous ne trouvez rien, utilisez le formulaire de recherche avanc. Et si ici encore la recherche ne donne rien, crez unenouvelle discussion, dans laquelle vous pourrez donner autant de dtails que ncessaires en crivant votre question. Notez que vousdevrez tre enregistr pour crer une discussion.

    Certaines forums ont des discussions situs en haut de la page : elles contiennent de prcieuses informations, lisez-les attentivement.

    Notre bug-trackerS'il se trouve que votre problme vient d'un bug de PrestaShop plutt que d'une erreur de votre ct, signalez le problme aubug-tracker de PrestaShop : http://forge.prestashop.com/ (vous devrez d'abord crer un compte). Cela vous permettra de discuter duproblme directement avec les dveloppeurs de PrestaShop.

    Sites officiels de PrestaShop

  • URL Description

    http://www.prestashop.com Site officiel du logiciel PrestaShop, de sa communaut et de la socit qui s'en occupe.

    http://addons.prestashop.com Place de march de thmes et modules.

    http://www.prestabox.com Faites hberger votre boutique par PrestaShop !

    Aucun

    Crer un module PrestaShop - PrestaShop 1.5 - PrestaShop documentation http://doc.prestashop.com/pages/viewpage.action?pageId=15171738

    24 sur 24 19/03/2013 16:22