Accueil » Conseils & tutoriels sites internet » Tutos Prestashop » Prestashop 1.7 : Canevas de module

Prestashop 1.7 : Canevas de module

Posté dans : Tutos Prestashop 0

Un canevas de module pour Prestashop 1.7

Après la sortie récente de Prestashop 1.7, nous souhaitions partager avec vous ce canevas de module. Celui-ci est très basique mais permettra de servir de guide à ceux qui en ont besoin.

Prestashop 1.7 modifie quelque peut l'implémentation et l'utilisation des hooks par rapport à sa version précédente.

En effet, celui-ci met à notre disposition deux nouvelles fonctions :

  • rendreWidget(),
  • getWidgetVariables().

Celles-ci sont définies grace à l'interface "WidgetInterface" et nous permet de gérer nos hooks plus efficacement.

Mais place à la pratique!

La déclaration de la classe principale de notre module

Avec un Prestashop 1.7 utilisant le puissant FrameWork Symfony, nous avons la possibilité d'utiliser les NameSpaces pour implémenter nos modules.

use PrestaShop\PrestaShop\Core\Module\WidgetInterface;

class EverPsCanvas extends Module implements WidgetInterface
{
    // code ...
}

Ici, on précice d'abord le NameSpace que l'on désire utiliser. Et ensuite, durant la déclaration de la classe principale de notre module, en plus du fait d'étendre la classe parente Module, nous implémentons l'interface WidgetInterface.

Une interface ? WidgetInterface ?

Je comprends que cela puisse faire peur mais c'est plus impressionnant qu'il n'y parait.

Une interface permet de définir des fonctions que l'on souhaite retrouver dans la classe qui l'implémente. Les fonctions définies à l'intérieur de l'interface doivent être présentes dans notre classe EverPsCanvas.

Voici le code que contient l'interface WidgetInterface :

namespace PrestaShop\PrestaShop\Core\Module;

interface WidgetInterface
{
    public function renderWidget($hookName, array $configuration);
    public function getWidgetVariables($hookName, array $configuration);  
}

Elle se situe dans src/Core/Module/WidgetInterface.php. Nous voyons que celle-ci requière que les fonctions renderWidget et getWidgetVariables soient présentes dans la classe principale de notre module.

renderWidget()

Cette nouvelle fonction permet de traiter les "displayHooks". De cette façon, il n'est plus nécessaire de créer, pour chaque hook utilisé par notre module, une nouvelle fonction.

En effet, cette fonction possède l'argument $hookName qui prendra successivement la valeur du nom des hooks enregistrés par notre module. Il sera donc possible d'écrire des conditions qui feront réagir notre code en fonction du $hookName.

Le second argument $configuration contiendra les cookies et autres informations utiles.

getWidgetVariables()

Cette dernière nous permet d'envoyer les variables nécessaires à nos hooks pour fonctionner correctement. Sur la version précédente de Prestashop, ces variables était définies directement dans la fonction implémentant notre hook. Le fait de séparer celles-ci, permet un code plus claire et plus lisible.

Et les templates dans tout ça ?

Prestashop 1.7 garde le moteur de template Smarty au niveau des modules et des thèmes. Cependant la syntaxe s'est vue quelque peu modifiée pour faire appel à ceux-ci à l'intérieur de notre fonction renderWidget().

Le chemin vers un template va être défini dans une propriété privée de l'intance de notre module (ici $templateFile). Elle sera implémentée dans la fonction __contruct() de notre classe :

$this->templateFile = 'module:everpscanvas/views/templates/hook/everpscanvas.tpl';

Le résultat

Voici maintenant ce à quoi va ressembler la classe principale de notre module. Les fonctions habituelles ont été tronquées volontairement car elles ne différent pas de celles d'un module pour la version précédente de Prestashop.

use PrestaShop\PrestaShop\Core\Module\WidgetInterface;

class EverPsCanvas extends Module implements WidgetInterface
{
    private $templateFile;

    public function __construct()
    {
        $this->name = 'everpscanvas';
        $this->tab = 'front_office_features';
        $this->version = '0.1';
        $this->author = 'Team Ever';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = array('min' => '1.7.1.0', 'max' => _PS_VERSION_);

        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Ever Ps Canvas');
        $this->description = $this->l('A Prestashop 1.7 Module Canvas.');
        $this->confirmUninstall = $this->l('Are you sure you want to uninstall this module ?');

        $this->templateFile = 'module:everpscanvas/views/templates/hook/everpscanvas.tpl';    
    }

    // install(), uninstall(), getContent() ...

    public function renderWidget($hookName = null, array $configuration = [])
    {
        if (!$this->isCached($this->templateFile, $this->getCacheId('everpscanvas'))) {
            $this->smarty->assign($this->getWidgetVariables($hookName, $configuration));
        }

        return $this->fetch($this->templateFile, $this->getCacheId('everpscanvas'));

    }

    public function getWidgetVariables($hookName = null, array $configuration = [])
    {
        return [
            'content_html' => Configuration::get('EVERPSCANVAS_HTML', $this->context->language->id)
        ];
    }
}

Et voilà ce à quoi peut ressembler un module pour Prestashop 1.7. Vous pouvez trouver les sources complètes de ce module sur GitHub : Ever Ps Canvas. Vos retours, critiques et idées afin d'améliorer ce projet sont les bienvenus.

En vous souhaitant beaucoup de plaisir à coder pour Prestashop 1.7, à bientôt !

Imprimer Imprimer

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.