Note : Cette fonctionnalité n’est pas disponible via la console native de Prestashop ( disponible à partir de prestashop 1.7 ) mais sur mon outil de console externe : prestashopConsole ( cf. https://github.com/nenes25/prestashop_console )

J’ai dernièrement du créer de nombreux modules sous Prestashop et le fait de les copier / coller des différents modules à chaque fois m’a fait perdre pas mal de temps.
Et je ne connais pas forcément par coeur l’ensemble des syntaxes nécessaires.
Pour optimiser tout cela j’ai donc cherché un moyen de créer facilement et rapidement des modules.
Il existe déjà la possibilité de créer un module via le générateur de module de Prestashop ( disponible ici ) , en revanche cela ne correspondait pas vraiment à mon besoin.
Le plus simple est donc de le gérer via la ligne de commandes, j’ai donc implémenté des nouvelles commandes dans la console de prestashop pour gérer cela.

Voyons ensemble comment créer facilement et rapidement un module via cet outil.
Le but étant bien entendu un canevas de module pour son développement et non pas un module final 😉

Pour cela 3 nouvelles commandes font donc leur apparition :

  • module:generate:module : Génération du fichier principal du module
  • module:generate:controller : Génération d’un controller front ou back pour un module ( Architecture legacy )
  • module:generate:upgrade : Génération d’un fichier d’upgrade pour un module. 

Génération d’un module

Le seul paramètre nécessaire est le nom du module

Les options suivantes sont disponibles ( et non obligatoires ):

  • auhor : Auteur du module
  • displayName : Nom du module
  • description : description du module
  • hookList : Liste des hooks du module
  • widget : Le module implémente la widgetInterface ( PS 1.7 )
  • templates : Générer ou non les templates des hooks du module

Plusieurs approche sont possible :

Approche interactive :

./prestashopConsole.phar module:generate:module hhdev -1=true

Les paramètres sont demandés par la console au fur et à mesure

Génération console

Saisie des options directement dans la console.

En mode raccourci

./prestashopConsole.phar module:generate:module -a"hhennes" -dn"Module dev" -d"Module généré via la console prestashop" -l"displayHeader,displayFooter,displayLeftColumn" -wtrue -ttrue

Ou en mode complet

./prestashopConsole.phar module:generate:module --author="hhennes" --displayName="Module dev" --description="Module généré via la console prestashop" --hookList="displayHeader,displayFooter,displayLeftColumn" --widget=true -templates=true

 

Le contenu généré est le suivant

if (!defined('_PS_VERSION_')) {
    exit;
}
 
use PrestaShop\PrestaShop\Core\Module\WidgetInterface;
 
class Hhdev extends Module implements WidgetInterface {
 
public function __construct()
{
    $this->name = 'hhdev';
    $this->tab = 'others';
    $this->version = '0.1.0';
    $this->author = 'hhennes';
    $this->bootstrap = true;
    parent::__construct();
 
    $this->displayName = $this->l('Module dev');
    $this->description = $this->l('Module généré via la console Prestashop');
}
 
/**
 * Installation du module
 * @return bool
 */
public function install()
{
    if (!parent::install()
        || !$this->registerHook(['displayHeader','displayFooter','displayLeftColumn'])
 
    ) {
        return false;
    }
 
    return true;
}
 
 
/**
 * Function displayHeaderdescription 
 * @param array $params
 * @return mixed
 */
public function hookDisplayHeader($params){
    return $this->display(__FILE__,"views/templates/hook/displayHeader.tpl");
}
 
 
/**
 * Function displayFooterdescription 
 * @param array $params
 * @return mixed
 */
public function hookDisplayFooter($params){
    return $this->display(__FILE__,"views/templates/hook/displayFooter.tpl");
}
 
 
/**
 * Function displayLeftColumndescription 
 * @param array $params
 * @return mixed
 */
public function hookDisplayLeftColumn($params){
    return $this->display(__FILE__,"views/templates/hook/displayLeftColumn.tpl");
}
 
 
 
 public function renderWidget($hookName = null, array $configuration = [])
    {
        //@TODO Implements RenderWidgetMethod
    }
 
    public function getWidgetVariables($hookName = null, array $configuration = [])
    {
     //@TODO Implements getWidgetVariables
    }
 
}

 

Génération d’un controller :

Le module doit exister au préalable

Les 3 paramètres nécessaires sont :

  • le nom du module
  • le nom du controller
  • le type de controller ( front ou admin )

L’option suivante est disponible :

  • template : générer le template pour le controller ( par défaut oui )

Voici comment générer un controller front AVEC un template :

./prestashopConsole.phar module:generate:controller hhdev demo front

Voici comment générer un controller front SANS template

./prestashopConsole.phar module:generate:controller hhdev demo front -t=false

Le contenu suivant est généré pour le controller

class HhdevDemoModuleFrontController extends ModuleFrontController {
 
    public function init()
    {
        // TODO: Change the autogenerated stub
        return parent::init(); 
    }
 
    public function postProcess()
    {
        // TODO: Change the autogenerated stub
        parent::postProcess(); 
    }
 
 
    public function initContent()
    {
        parent::initContent();
        $this->setTemplate('module:hhdev/views/templates/front/demo.tpl');
    }
}

Et un template correspondant est créé dans le dossier views/templates/front

Voici comment générer un controller admin

./prestashopConsole.phar module:generate:controller hhdev demo admin

Le contenu suivant est généré :

class HhdevDemoController extends ModuleAdminController {
 
 
}

 

Génération d’un fichier d’upgrade

Le module doit exister au préalable

Les 2 paramètres nécessaires sont :

  • le nom du module
  • la version du module

Pour générer un fichier d’upgrade du module hhdev en version 0.2.0 la commande a exécuter sera la suivante :

./prestashopConsole.phar module:generate:upgrade hhdev 0.2.0

Elle générera automatiquement un fichier upgrade-0.2.0.php dans le dossier upgrade du module hhdev avec le contenu suivant :

<?php
 
if (!defined('_PS_VERSION_')) {
exit;
}
 
function upgrade_module_0_2_0($module)
{
//@Todo generate content
}

En cumulant les fonction de génération et d’installation, il est possible d’obtenir un affichage en quelques lignes 🙂

Module console generate and install

N’hésitez pas à me faire vos retours sur ces fonctionnalités qui m’ont déjà fait gagner pas mal de temps 🙂