...
Cette classe doit porter le même 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'hériter de ses méthodes et attributs. Elle peut tout aussi bien étendre l'une des classes dérivées de Module
pour des besoins spécifiques : PaymentModule
, ModuleGridEngine
, ModuleGraph
...
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.php |
---|
borderStyle | solid |
---|
|
<?php
if (!defined('_PS_VERSION_'))
exit;
class MyModule extends Module
{
}
?>
|
...
Remplissons maintenant notre classe avec les lignes de démarrage essentielles :
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.php |
---|
borderStyle | solid |
---|
|
<?php
if (!defined('_PS_VERSION_'))
exit;
class MyModule extends Module
{
public function __construct()
{
$this->name = 'mymodule';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'Firstname Lastname';
$this->need_instance = 0;
$this->ps_versions_compliancy = array('min' => '1.5', 'max' => '1.5');
$this->dependencies = array('blockcart');
parent::__construct();
$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');
}
}
?>
|
...
Voici notre fichier template, situé dans /views/templates/hook/mymodule.tpl
:
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.tpl |
---|
borderStyle | solid |
---|
|
<!-- Block mymodule -->
<div id="mymodule_block_left" class="block">
<h4>Welcome!</h4>
<div class="block_content">
<p>Hello,
{if isset($my_module_name) && $my_module_name}
{$my_module_name}
{else}
World
{/if}
!
</p>
<ul>
<li><a href="{$my_module_link}" title="Click this link">Click me!</a></li>
</ul>
</div>
</div>
<!-- /Block mymodule -->
|
...
Voici nos deux fichiers :
Code Block |
---|
borderStyle | solid |
---|
title | display.php |
---|
borderStyle | solid |
---|
|
<?php
class mymoduledisplayModuleFrontController extends ModuleFrontController
{
public function initContent()
{
parent::initContent();
$this->setTemplate('display.tpl');
}
}
|
Code Block |
---|
borderStyle | solid |
---|
title | display.tpl |
---|
borderStyle | solid |
---|
|
Welcome to my shop!
|
Explorons display.php
, notre premier contrôleur front-end PrestaShop, placé dans le sous-dossier /controllers/front
du dossier du module :
...
Note |
---|
Jusqu'à PrestaShop 1.4, les développeurs qui souhaitaient intégrer un fichier template dans le thème du site devaient utiliser des appels include() pour chaque portion de la page. Voici le code 1.4 de notre display.php ci-dessus : Code Block |
---|
borderStyle | solid |
---|
title | display.php |
---|
borderStyle | solid |
---|
| <?php
// Ce fichier doit être placé à la racine du dossier du module
global $smarty;
include('../../config/config.inc.php');
include('../../header.php');
$smarty->display(dirname(__FILE__).'/display.tpl');
include('../../footer.php');
?>
|
Comme vous pouvez le voir, cela n'est plus nécessaire avec PrestaShop 1.5 : vous pouvez et même devriez utiliser un contrôleur front-end, et le contrôleur (Contrôleur) et son template (Vue) devraient avoir le même nom : display.php est lié à display.tpl . |
...
Par exemple, nous pouvons créer la variable $my_module_message
en PHP directement dans la méthode hookDisplayLeftColumn()
, et la faire s'afficher par notre fichier template.
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.php |
---|
borderStyle | solid |
---|
|
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 chaîne dans la méthode de traduction l()
)
);
return $this->display(__FILE__, 'mymodule.tpl');
}
|
Partant de là, nous pouvons demander à Smarty d'afficher le contenu de cette variable dans notre fichier TPL.
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.tpl |
---|
borderStyle | solid |
---|
|
{$my_module_message}
|
PrestaShop ajoute ses propres variables. Par exemple, {$hook_left_column}
sera remplacé par le contenu de la colonne de gauche, ce qui signifie le contenu de tous les modules qui ont été attachés au hook de la colonne de gauche.
...
Les chaînes des fichiers PHP doivent être affichées à l'aide de la méthode l()
, qui provient de la classe abstraite Module, et est donc disponible au sein de tous les modules.
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.php (partial) |
---|
borderStyle | solid |
---|
|
...
$this->displayName = $this->l('My module');
$this->description = $this->l('Description of my module.');
...
|
Les chaînes des fichiers TPL doivent être transformées en contenu dynamique, que Smarty remplacera par la traduction dans la langue choisie. Dans notre exemple, le fichier mymodule.tpl
...
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.tpl (partial) |
---|
borderStyle | solid |
---|
|
<li>
<a href="{$base_dir}modules/mymodule/mymodule_page.php" title="Click this link">Click me!</a>
</li>
<!-- Block mymodule -->
<div id="mymodule_block_left" class="block">
<h4>{l s='Welcome!' mod='mymodule'}</h4>
<div class="block_content">
<p>Hello,
{if isset($my_module_name) && $my_module_name}
{$my_module_name}
{else}
World
{/if}
!
</p>
<ul>
<li><a href="{$my_module_link}" title="Click this link">Click me!</a></li>
</ul>
</div>
</div>
<!-- /Block mymodule --> |
...devient...
Code Block |
---|
borderStyle | solid |
---|
title | mymodule.tpl (partial) |
---|
borderStyle | solid |
---|
|
<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>
<!-- Block mymodule -->
<div id="mymodule_block_left" class="block">
<h4>{l s='Welcome!' mod='mymodule'}</h4>
<div class="block_content">
<p>
{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'}
</p>
<ul>
<li><a href="{$my_module_link}" title="{l s='Click this link' mod='mymodule'}">{l s='Click me!' mod='mymodule'}</a></li>
</ul>
</div>
</div>
<!-- /Block mymodule --> |
...
Code Block |
---|
|
Welcome to this page!
|
...devient...
Code Block |
---|
borderStyle | solid |
---|
title | display.tpl |
---|
borderStyle | solid |
---|
|
{l s='Welcome to this page!' mod='mymodule'}
|
...
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 :
Code Block |
---|
borderStyle | solid |
---|
title | fr.php |
---|
borderStyle | solid |
---|
|
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{mymodule}prestashop>mymodule_2ddddc2a736e4128ce1cdfd22b041e7f'] = 'Mon module';
$_MODULE['<{mymodule}prestashop>mymodule_d6968577f69f08c93c209bd8b6b3d4d5'] = 'Description du module.';
$_MODULE['<{mymodule}prestashop>mymodule_533937acf0e84c92e787614bbb16a7a0'] = 'Êtes-vous certain de vouloir désinstaller ce module ? Vous perdrez tous vos réglages !';
$_MODULE['<{mymodule}prestashop>mymodule_0f40e8817b005044250943f57a21c5e7'] = 'Aucun nom fourni';
$_MODULE['<{mymodule}prestashop>mymodule_fe5d926454b6a8144efce13a44d019ba'] = 'Valeur de configuration non valide.';
$_MODULE['<{mymodule}prestashop>mymodule_c888438d14855d7d96a2724ee9c306bd'] = 'Réglages mis à jour';
$_MODULE['<{mymodule}prestashop>mymodule_f4f70727dc34561dfde1a3c529b6205c'] = 'Réglages';
$_MODULE['<{mymodule}prestashop>mymodule_2f6e771db304264c8104cb7534bb80cd'] = 'Valeur de configuration';
$_MODULE['<{mymodule}prestashop>mymodule_c9cc8cce247e49bae79f15173ce97354'] = 'Enregistrer';
$_MODULE['<{mymodule}prestashop>mymodule_630f6dc397fe74e52d5189e2c80f282b'] = 'Retour à la liste';
$_MODULE['<{mymodule}prestashop>display_86e88cbccafa83831b4c6685501c6e58'] = 'Bienvenue sur cette page !';
$_MODULE['<{mymodule}prestashop>mymodule_9a843f20677a52ca79af903123147af0'] = 'Bienvenue !';
$_MODULE['<{mymodule}prestashop>mymodule_f5a7924e621e84c9280a9a27e1bcb7f6'] = 'Monde';
$_MODULE['<{mymodule}prestashop>mymodule_3af204e311ba60e6556822eac1437208'] = 'Bonjour %s !';
$_MODULE['<{mymodule}prestashop>mymodule_c66b10fbf9cb6526d0f7d7a602a09b75'] = 'Cliquez sur ce lien';
$_MODULE['<{mymodule}prestashop>mymodule_f42c5e677c97b2167e7e6b1e0028ec6d'] = 'Cliquez-moi !';
|
...