Child pages
  • Créer un module PrestaShop

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • /admin : contient tous les fichiers de PrestaShop relatifs au back-office. Si vous cherchez à accéder à ce dossier à l'aide de votre navigateur, il vous sera demandé de vous authentifier, pour des raisons de sécurité. Important : faites en sorte que ce dossier reste protéger par des fichiers .htaccess et .htpasswd.
  • /cache: contient des dossiers temporaires qui sont générés et réutilisés afin d'alléger la charge du serveur.
  • /classes : contient tous les fichiers relatifs au modèle Objet de PrestaShop. Chaque fichier représente (et contient) une classe PHP, et ses méthodes et propriétés.
  • /config : contient tous les fichiers de configuration de PrestaShop. Ne modifiez jamais ces fichiers, sauf on vous le demande expressément, car ils sont gérés directement par l'installateur et le back-office de PrestaShop.
  • /controllers : contient tous les fichiers relatifs aux contrôleurs de PrestaShop (dans le cadre Modèle-Vue-Contrôleur (ou MVC), l'architecture logicielle sur laquelle repose PrestaShop. Chaque fichier contrôle une partie précise de PrestaShop.
  • /css : contient tous les fichiers CSS qui ne sont pas liés aux thèmes ; de fait, ils sont la plupart du temps utilisés par le back-office de PrestaShop.
  • /docs : contient un peu de documentation. Note : vous devriez les effacer dans un environnement de production.
  • /download : contient tous vos produits numériques, pouvant être téléchargés : fichiers PDFs, MP3s, etc.
  • /img : contient toutes les images par défaut de PrestaShop, c'est à dire celles qui n'appartiennent pas au thème. C'est ici que vous trouverez les sous-dossiers des images pour les catégories de produits (/c, celles des produits (sous-dossier /p) et celle pour le back-office lui-même (sous-dossier /admin).
  • /install : contient tous les fichiers relatifs à l'installateur de PrestaShop. Vous devriez l'effacer après installation, afin d'améliorer la sécurité.
  • /js : contient tous les fichiers JavaScript qui ne sont pas liés aux thèmes. La plupart appartiennent au back-office. C'est également ici que vous trouverez le framework jQuery.
  • /localization : contient tous les fichiers de localisation de PrestaShop – c'est à dire, les fichiers qui contiennent des informations locales, comme la monnaie, la langue, les règles de taxes et les groupes de règles de taxes, les états et autres unités utilisées dans le pays choisi (par exemple, le volume en litre, le poids en kilogrammes, etc.).
  • /log : contient les fichiers de log générés par PrestaShop lors de diverses étapes, par exemple pendant le processus d'installation.
  • /mails : contient tous les fichiers HTML et textes relatifs aux e-mails envoyés par PrestaShop. Chaque langue dispose de son propre 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 définitivement un module, commencez par le désinstaller 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 de nommage de dossier et fichiers de PrestaShop, il devient possible de créer des fichiers qui supplantes supplantent les classes et contrôleurs par défaut de PrestaShop. Cela vous permet de modifier le comportement fondamental de PrestaShop sans toucher aux fichiers originaux, ce qui les garde intact en prévision de la prochaine mise à jour.
  • /themes : contient tous les thèmes actuellement installés, chacun dans son propre dossier.
  • /tools : contient les outils externes qui ont été intégré à PrestaShop. Par exemple, c'est ici que vous trouverez Smarty (moteur de thème), FPDF (générateur de fichiers PDF), Swift (expéditeur d'e-mails), PEAR XML Parser (outil PHP).
  • /translations : contient un sous-dossier pour chaque langue. Cependant, si vous souhaitez modifier les traductions, vous devez 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 personnalisés 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 son API.

...

Tout d'abord, créez le dossier du module. Il fois doit avoir le même nom que le module, avec aucune espace, seulement des caractères alphanumériques, le tiret et le caractère souligné "_", tous en minuscule : /mymodule.

...

Par exemple, la partie visible (front-office) du module est définie dans des fichiers .tpl placés dans un dossier spécifique : /views/templates/front/. Les fichiers template peuvent prendre n'importe quel nom. S'il n'y en a qu'un seul, une bonne pratique consiste à lui donner le même nom que le dossier et le fichier principal : mymodule.tpl.

Dans le cadre de ce tutoriel, le module sera attaché à la colonne de gauche via un hook. De fait, les fichiers templates appelés par ce hook devront être placés dans le dossier /views/templates/hook/ afin de fonctionner.

...

  • Le drapeau need_instance indique s'il faut charger la classe du module quand celui-ci est affiché dans la page "Modules" du back-office. S'il est à 0, le module n'est pas chargé, et il utilisera donc moins de ressources. Si votre module doit afficher un avertissement 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 de PrestaShop avec lesquelles le module est compatible. Dans l'exemple ci-dessus, nous indiquons explicitement que ce module ne 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 de l'activation d'un autre module afin de fonctionnement fonctionnent correctement. Votre module peut se avoir besoin de fonctionnalités mises en place par l'autre module, ou il peut simplement être un ajout utile qui n'aurait aucun sens sans cet autre module. Utiliser le dossier du module comme identifiant. Dans notre exemple, notre module requiert l'activation du module Blockcart.

...

Ces deux méthodes vous permettent de contrôle contrôler ce qu'il se passe quand l'administrateur de la boutique installe ou désinstalle le module, pour par exemple vérifier les réglages de PrestaShop ou enregistrer ses propres réglages dans la base de données. Elles doivent faire partie de la classe principale du module (dans notre exemple, la classe MyModule).

...

  • Shop::isFeatureActive() : cette ligne teste simplement si la fonctionnalité multiboutique est activée ou non, et si au moins deux boutiques sont actuellement activées.
  • Shop::setContext(Shop::CONTEXT_ALL) : cette ligne modifier modifie le contexte pour appliquer les changements qui suivent à toutes les boutiques existantes plus qu'à la seule boutique actuellement utilisée.

...

Maintenant que toutes les bases sont en place, rechargez la page "Modules" du back-office et trouvez votre module dans la section "Fonctionnalités front-office". Installez-le (ou réinitialisez-le s'il est déjà installé).

Image RemovedImage Added

Lors de l'installation, PrestaShop crée automatiquement un fichier config.xml dans le dossier du module, qui stocke les informations de configuration. Vous devez être très prudent lorsque vous décidez de le modifier.

...

  • hookDisplayLeftColumn() : attachera du code là a à la colonne de gauche – dans notre cas, nous allons récupérer le réglage de module MYMODULE_NAME et afficher le fichier template mymodule.tpl, qui se trouve dans le dossier /views/templates/hook/.
  • hookDisplayRightColumn() : fera de même que hookDisplayLeftColumn(), mais en l'appliquant à la colonne de droite.
  • hookDisplayHeader() : ajoutera un lien vers le fichier CSS du module, /css/mymodule.css

...

Le hook header n'est pas un en-tête entête visuel, mais nous permet d'ajouter du code entre les balises <head> du fichier HTML résultant. C'est surtout utile pour les fichiers JavaScript et CSS. Pour ajouter dans l'en-tête un lien vers notre fichier CSS, nous utilisons la méthode addCSS(), qui génère la bonne balise <link> vers le fichier indiqué en paramètre.

Enregistrez votre fichier, et vous déjà vous pouvez accrocher le template de votre module au thème, le déplacer et le transplanter : aller dans la page "Position" du menu "Modules" du back-office, et cliquez sur le bouton "Greffer un module" (en haut à droite de la page).

...

Maintenant que nous avons accès à la colonne de gauche, nous pouvions y afficher ce que nous voulons.

Comme dit plus haut, le contenu à afficher dans le thème doit être dans un fichier de template .tpl. Nous allons donc créer le fichier mymodule.phptpl, qui sera passé en paramètre de la méthode display() dans le code de notre module, avec la méthode hookDisplayLeftColumn(). Lorsque l'on appelle un template depuis un hook, PrestaShop cherche ce fichier template dans le dossier de templates /views/templates/hook/ (dans le dossier du module), que vous devez créer vous-même.

...

  • L'appel {l s='xxx' mod='yyy'} est une méthode propre à PrestaShop qui enregistre la chaîne dans le panneau de traduction du module. Le paramètre s est pour la chaîne, tandis que le paramètre mod doit contenu contenir l'identifiant du module (dans le cas présenteprésent, "mymodule"). Nous n'utilisons cette méthode qu'une fois dans cet exemple pour des raisons de lisibilité, mais dans les faits il faudrait l'appliquer à absolument toutes les chaînes.
  • Les déclarations {if}, {else} et {/if} sont des conditions Smarty. Dans notre exemple, nous vérifions que la variable Smarty $my_module_name existe bien (grâce à la méthode Smarty isset()) et qu'elle n'est pas vide. Si tout est comme attendu, 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 bientôt créer, et qui donne accès au dossier racine de PrestaShop.

...

Votre module peut avoir un lien "Configurer" dans la liste des modules du back-office, et donc permettre à l'utilisateur de modifier quelques réglages. Ce lien "Configurer" apparaît avec l'addition de la méthode getContent() dans la classe principale. C'est une méthode PrestaShop standard : sa seule présence envoie au back-office un message indique indiquant qu'il y a une page de configuration, et donc que le lien "Configurer" devrait être affiché.

...

  1. À l'aide de la méthode Configuration::get(), nous récupérons la valeur de la langue par défaut ("PS_LANG_DEFAULT"). Pour des questions de sécurité, nous faisons en sorte que la variable soit un entier en utilisant (int).
  2. Afin de préparer la génération du formulaire, nous construisons un tableau des titres, champs et autres spécificités de formulaire.
    Pour ce faire, nous créons la variable $fields_form, qui contient à un tableau multidimensionnel. Chaque tableau qu'il contient présente une description détaillée des balises que le formulaire contient. À partir de cette variable, PrestaShop pourra générer le formulaire HTML tel que décrit.
    Dans notre exemple, nous définissons trois balises (<legend>, <input> et <submit>) et leurs attributs à l'aide de tableau. Le format est simple à comprendre : les tableaux de la légende et du bouton contiennent les attributs de chaque balise, tandis que le champ texte contient autant de champ <input> que nécessaire, chacun étant à son tour décrit en tableau contenant les attributs nécessaires. Par exemple :

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

    ...génère les balises HTML suivantes :

    Code Block
    <label>Configuration value </label>
    <div class="margin-form">
      <input id="MYMODULE_NAME" class="" type="text" size="20" value="my friend" name="MYMODULE_NAME">
      <sup>*</sup>
    <div class="clear"></div>

    Comme vous pouvez le voir, PrestaShop utilise tout cela intelligemment, et génère tout le code nécessaire à l'obtention d'un formulaire utile.
    Notez que la valeur du tableau principal est utilisée plus loin dans le code, au sein du code permettant de générer le formulaire.

  3. Nous créons ensuite la classe HelperForm. Cette section du code est expliquée dans la prochaine section de ce chapitre.
  4. Une fois que les réglages de HelperForm sont en place, nous générons le formulaire à partir de la variable $fields_form.

...

Rejoignez nos forums à l'adresse http://www.prestashop.com/forums/, et cherchez-y une réponse à votre question en tapant les mots-clefs. Si vous ne trouvez rien, utilisez le formulaire de recherche avancé. Et si ici encore la recherche ne donne rien, créez une nouvelle discussion, dans laquelle vous pourrez donner autant de détails que nécessaires en écrivant votre question. Notez que vous devrez être enregistré pour créer une discussion.

Certaines Certains forums ont des discussions situés en haut de la page : elles contiennent de précieuses informations, lisez-les attentivement.

...