Child pages
  • Créer un module PrestaShop

Versions Compared

Key

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

...

Code Block
public function hookLeftColumn( $params )
  {
  global $smarty;
  return $this->display(__FILE__, 'mymodule.tpl');
  }

Ma La méthode hookLeftColumn() fait en sorte que le module puisse s'accrocher au point d'accroche de la colonne de gauche du thème.
$smarty est la variable globale du système de modèle Smarty, utilisé par PrestaShop, et à laquelle nous devons accéder.
La méthode display() renvoie le contenu du fichier de template mymodule.tpl, s'il existe.

...

Fichier / Dossier

Description

img_ps_dir

URL for the PrestaShop 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.

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.

If you need to have all of the current page's Smarty variables displayed, add the following functionSi vous avez besoin d'afficher toutes les variables Smarty de la page, ajouter la fonction suivante :

Code Block
{debug}

Comments are based on asterisk:Les commentaires sont formés avec un asterisque.

Code Block
{* ThisCette stringligne isest commentedcommentée. out *}

{*
ThisCette stringligne iségalement too!
*}

Unlike with HTML comments, commented-out Smarty code is not present in the final output file.

Module translation

Our module's text strings are written in English, but we might want French shop owners to use our module too. We therefore have to translate those strings into French, both front-office and back-offices ones. This could be a tedious task, but Smarty and PrestaShop's own translation make it far easier.

Strings in PHP files will need to be displayed through the l() method, from the Module.php abstract classA la différence des commentaires HTML, le code Smart commenté n'apparaît pas dans le fichier final.

Traduction d'un module

Les chaînes de texte de notre module sont écrites en anglais, mais nous vondrons sans doute que les français puissent également utiliser notre module. Nous devons donc traduire ces chaînes en français, à la fois celle du front-office et celle du back-office. Cela pourrait être une tâche laborieuse, mais Smarty et les propres outils de traduction de PrestaShop facilitent cela.

Les chaînes des fichiers PHP devront être affichées par le biais de la méthode l(), provenant de la classe abstraite Module.php.

Code Block
titlemymodule.php (partial)
borderStylesolid
...
$this->displayName = $this->l( 'My module' );
$this->description = $this->l( 'Description of my module.' );
...

Strings in TPL files will need to be turned into dynamic content, which Smarty will replace by the translation for the chosen language. In our sample module, this fileLes chaînes des frichiers TPL devront être transformée en contenu dynamique, qui Smarty remplacera par le traduction dans la langue choisie. Dans notre module d'exemple, ce fichier :

Code Block
xml
xml
titlemymodule.tpl (partial)
borderStylesolid
<li>
  <a href="{$base_dir}modules/mymodule/mymodule_page.php" title="Click this link">Click me!</a>
</li>

...becomesdevient :

Code Block
xml
xml
titlemymodule.tpl (partial)
borderStylesolid
<li>
  <a href="{$base_dir}modules/mymodule/mymodule_page.php" title="{l s='Click this link' mod='mymodule'}">{l s='Click me!' mod='mymodule'}</a>
</li>

...and this oneet celui-ci:

Code Block
xml
xml
titlemymodule_page.tpl
<h4>Welcome!</h4>
...
Click me!

...becomesdevient :

Code Block
xml
xml
titlemymodule.tpl
borderStylesolid
<h4>{l s='Welcome!' mod='mymodule'}</h4>
...
{l s='Click me!' mod='mymodule'}

The translation tool needs the mod parameter in order to match the string to translate with its translation.
Strings are delimited with single quotes. If a string contains single quotes, they should be escaped using a backslash ().

This way, strings can be directly translated inside PrestaShop: go to the "Tools" tab, its "Translations" sub-tab, and in the "Modify translations" drop-down menu, choose "Module translations", then click the French flag in order to translate modules into French.

The next page displays all the strings for all the currently-installed modules. Modules that have all their strings already translated have their fieldset closed, whereas if at least one string is missing in a module's translation, its fieldset is expanded.
In order to translate your module's strings (the ones that were "marked" using the l() method), simply find your module in the list (use the browser's in-page search), and fill the empty fields.

Image Removed

Once all strings for your module are correctly translated, click on the "Update translation" button, either at the top or the bottom of the page.

Tip

Each field has an icon on its right. This enables you to get an suggestion from Google Translate. You can hover the mouse over it to see the translation, and click it to fill the field with the translation.

Automatic translation are not always accurate; use with caution.

The translations are saved in a new file, fr.php (or languageCode.php, which is generated by PrestaShop and looks like thisL'outil de traduction a besoin du paramètre mod pour faire la correspondance entre les chaînes et leurs traductions.
Les chaînes sont délimitées par des apostrophes. Si une chaîne contient des guillemets, ils devront être échappé à l'aide d'un backlash :
.

Ainsi, les chaînes peuvent être directement traduites dans PrestaShop : allez dans l'onglet "Outils", son sous-onglet "Traductions", et dans le menu déroulant "Modifier les traductions", choisissez "Traductions de module", puis cliquez sur le drapeau français pour commencer à traduire les modules en Français.

La page suivante affichera toutes les chaîens de tous les modules actuellement installés. Les modules dont toutes les chaînes sont déjà traduites ont leur bloc de chaînes replié, tandis que ceux ayant au moins une chaîne manquante ont le leur déplié. Afin de traduire les chaînes de votre module (celles qui ont été "marquées" avec la méthodes l()), trouvez simplement votre module dans la liste (utiliser la recherche de votre navigateur), et remplissez les champs vides.

Image Added

Une fois que toutes les chaînes sont correctement traduites, cliquez sur le bouton "Mettre à jour la traduction", qui se trouve en haut et en bas de la page.

Tip

Chaque champ dispose d'une icône à sa droite. Elle vous permet d'obtenir une suggestion depuis Google Translate. Vous pouvez le survoler avec votre souris pour voir la suggestions, et cliquer sur l'icône pour appliquer la suggestion au champ.

Les traductions automatiques ne sont pas toujours précises, vérifiez bien ce qui vous est proposé.

Les traductions sont enregistrées dans un nouveau fichier, fr.php (ou plus globalement, code-de-la-langgue.php, qui est généré par PrestaShop et ressemble à ceci :

Code Block
titlemymodule.tpl
borderStylesolid
<?php

global $_MODULE;
$_MODULE = array();
$_MODULE['<{mymodule}prestashop>mymodule_2ddddc2a736e4128ce1cdfd22b041e7f'] = 'Mon module';
$_MODULE['<{mymodule}prestashop>mymodule_d6968577f69f08c93c209bd8b6b3d4d5'] = 'Description de mon module';
$_MODULE['<{mymodule}prestashop>mymodule_c66b10fbf9cb6526d0f7d7a602a09b75'] = 'Cliquez sur ce lien';
$_MODULE['<{mymodule}prestashop>mymodule_f42c5e677c97b2167e7e6b1e0028ec6d'] = 'Cliquez-moi \!';
$_MODULE['<{mymodule}prestashop>mymodule_page_c0d7cffa0105851272f83d5c1fe63a1c'] = 'Bienvenue dans ma boutique \!';
Warning

This file must not be edited manually! It can only be edited through the PrestaShop translation tool.

Now that we have a translation, we can click on the French flag in the front-office (provided the language has indeed been installed), and get the expected result: the module's strings are now in French.

Image Removed

They are also translated in French when the back-office is in French.

Image Removed

Tip

The translated strings can only be taken into account by the PrestaShop tool, the PHP and TPL files have to be located at the root of the module's folder.

Creating the module's back-office tab, and its class

In this section you will learn how to give your module its own tab or sub-tab, in a matter of minutes.

Follow these steps:

...

Ce fichier ne doit pas être modifié manuellement ! Il ne doit être modifié que via l'outil de traduction de PrestaShop.

Maintenant que vous disposez d'une traduction, vous pouvez cliquer sur le drapeau français dans le front-office (pourvu que vous ayez effectivement activé la langue), et obtenir le résultat suivant : un module traduit en français.

Image Added

Les chaînes sont également traduites en français quand le back-office est en français.

Image Added

Tip

Pour que les chaînes à traduire soient prises en compte par l'outil de traduction de PrestaShop, il faut que les fichiers PHP et TPL soient à la racine du dossier du module.

Créer l'onglet d'administration du module, et sa classe

Dans cette section, nous allons voir comment donner à votre module son propre onglet ou sous-onglet, en quelques minutes.

Suivez les étapes suivantes :

  1. Ajoutez une nouvelle table à votre base de données PrestaShop, nommée ps_test. Donnez-lui deux champs :
    • id_test (INT 11) ;
    • test (VARCHAR VARCHAT 32)
    Create a blank file named
    • .
  2. Créez un fichier vide nommé Test.php in PrestaShop's dans le dossier /classes folder.Add the following lines to that file de PrestaShop ;
  3. Ajoutez les lignes suivantes à ce fichier :
Code Block
titleTest.php
borderStylesolid
<?php
class Test extends ObjectModel 
  {
  /** @var string Name */
  public $test;

  protected $fieldsRequired = array( 'test' );
  protected $fieldsSize = array( 'test' => 64 );
  protected $fieldsValidate = array( 'test' => 'isGenericName' );
  protected $table = 'test';
  protected $identifier = 'id_test';

  public function getFields() 
    {
    parent::validateFields();
    $fields[ 'test' ] = pSQL( $this->test );
    return $fields;
    }
  }
?>
  1. Create a blank file named Créez un fichier vide nommé AdminTest.php in PrestaShop's , dans le dossier /admin/tabs.Add the following lines to that file de PrestaShop ;
  2. Ajouter les lignes suivantes à ce fichier :
Code Block
titleAdminTest.php
borderStylesolid
<?php
include_once( PS_ADMIN_DIR . '/../classes/AdminTab.php' );

class AdminTest extends AdminTab
  {
  public function __construct()
    {
    $this->table = 'test';
    $this->className = 'Test';
    $this->lang = false;
    $this->edit = true;
    $this->delete = true;
    $this->fieldsDisplay = array(
      'id_test' => array(
        'title' => $this->l( 'ID' ),
        'align' => 'center',
        'width' => 25 ),
      'test' => array(
        'title' => $this->l( 'Name' ),
        'width' => 200 )
    );

    $this->identifier = 'id_test';

    parent::__construct();
    }

  public function displayForm()
    {
    global $currentIndex;

    $defaultLanguage = intval( Configuration::get( 'PS_LANG_DEFAULT' ) );
    $languages = Language::getLanguages();
    $obj = $this->loadObject( true );

    echo '
      <script type="text/javascript">
        id_language = Number('.$defaultLanguage.');
      </script>';

    echo '
      <form action="' . $currentIndex . '&submitAdd' .  $this->table . '=1&token=' . $this->token . '" method="post" class="width3">
        ' . ($obj->id ? '<input type="hidden" name="id_' . $this->table . '" value="' . $obj->id . '" />' : '').'
        <fieldset><legend><img src="../img/admin/profiles.png" />' . $this->l( 'Profiles' ) . '</legend>
          <label>'.$this->l( 'Name:' ).' </label>
          <div class="margin-form">';
    foreach ( $languages as $language )
      echo '
          <div id="name_' . $language['id_lang'|'id_lang'] . '" style="display: ' . ($language['id_lang'|'id_lang'] == $defaultLanguage ? 'block' : 'none') . '; float: left;">
            <input size="33" type="text" name="name_' . $language['id_lang'|'id_lang'] . '" value="' . htmlentities( $this->getFieldValue( $obj, 'name', intval( $language['id_lang'|'id_lang'] ) ), ENT_COMPAT, 'UTF-8' ) . '" /><sup>*</sup>
          </div>';
    $this->displayFlags( $languages, $defaultLanguage, 'name', 'name' );
    echo '
          <div class="clear"></div>
        </div>
        <div class="margin-form">
          <input type="submit" value="' . $this->l( ' Save ' ) . '" name="submitAdd' . $this->table . '" class="button" />
        </div>
        <div class="small"><sup>*</sup> ' . $this->l( 'Required field' ) . '</div>
      </fieldset>
    </form> ';
    }
  }
?>

Put the files online, then create the tab by going to the "Employee" tab, then its "Tabs" sub-tab. Click the "Add new" button, and fill-in the fields with the class' name, "AdminTest". Do not confuse "class" with "modules"! Choose an icon (like one from the FamFamFam pack), choose where the tab should go, and save. You're set! Now start customizing it to your needs!

Troubleshooting

If your module does not work as expected, here are a few ways to find help.

PrestaShop official forum

Join our forum at Mettez ces fichiers en ligne, puis créez l'onglet en vous rendant dans l'onglet "Employés", puis son sous-onglet "Onglets". Cliquez sur le bouton "Ajouter", et remplissez les champs avec le nom de la classe, "AdminTest". Ne confondez pas "class" et "modules" ! Choisissez l'icône (par exemple une provenant du pack FamFamFam), choisissez où l'onglet devra aller, et enregistrez. C'est fait ! Vous êtes libre maintenant d'optimiser cela.

En cas de problème

Si votre module ne marche pas comme prévu, voici quelques possibilités pour obtenir de l'aide :

Le forum officiel de PrestaShop

Rejoignez notre forum à l'adresse http://www.prestashop.com/forums/, and search for an answer using the relevant keywords. If your search needs refining, use the advanced search form. And if your search doesn't yield anything useful, create a new thread, where you can be as wordy as necessary when writing your question; you will need to registered first.

Some forums keep certain threads pinned on top of all threads; they contain some useful information, so be sure to read them through.

Our bug-tracker

if it turns out your issue stems from a PrestaShop bug rather than your code, please do submit the issue in the PrestaShop bug-trackeret lancez une recherche sur les mots clés en rapport avec votre problème. Si la recherche a besoin d'être précisée, utilisée le formulaire de recherche avancée. Et si aucune recherche ne vous apporte de réponse utile, lancez une nouvelle discussion, où vous pourrez être aussi prolixe que nécessaire au moment de décrire votre situation ; il vous faut bien sûr être d'abord membre du forum.

Certains forums conservent des discussion en tête des autres discussions : ils contiennent des informations utiles, lisez-les bien.h.

Notre bug-tracker

S'il se trouve que votre problème vient d'un bug de PrestaShop plutôt que de votre code, envoyez un rapport de bug sur le bug-tracker de PrestaShop : http://forge.prestashop.com/ (you will need to register). This enables you to discuss the issue directly with the PrestaShop developers.

Official PrestaShop websites

...

il vous faudra vous enregistrer). Cela vous permet de discuter le problème directement avec les développeurs PrestaShop.

Sites officiels PrestaShop

Adresse

Description

http://www.prestashop.com

Official website for the PrestaShop tool, its community, and the company behind it Site officiel de l'application PrestaShop, de sa communauté, et de la société qui le maintient.

http://addons.prestashop.com

Marketplace for themes and modules Place de marché pour les thèmes et modules.

http://www.prestabox.com

Host your shop with us Laissez-nous héberger votre boutique !