Cet article est la suite de Prestashop : Générer des modules via la console.

Toujours dans la même logique d’optimisation de création des modules via la ligne de commande 🙂

Je rappelle également  que 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 )

Cette fois-ci l’idée est de pouvoir générer rapidement et facilement un modèle associé à votre module qui héritera de la classe ObjectModel de Prestashop, le tout sans écrire une seule ligne de code 🙂

Une nouvelle commande fait donc son apparition :

module:generate:model

Les paramètres obligatoires sont :

  • Nom du module
  • Classe du Modèle.

Voici par exemple comment créer un objet Sample pour le module hhdev

./prestashopConsole.phar module:generate:model hhdev Sample

Une saisie interactive va ensuite vous demander les informations nécessaires à la création de votre modèle.

Pour l’exemple nous souhaitons que cet objet ait les propriétés suivantes :

  • table : sample ( Nom de la table sql sans le prefix )
  • primary : id_sample ( Clé primaire de l’objet )
  • Champs :
    • name ( Nom du champ )
      • type : string
      • obligatoire : oui
      • validation : isName
      • longueur : 100 ( Longueur maximum du champ )
      • langue : Non
    • firstname
      • type: string
      • obligatoire : non
      • validation : isName
      • longueur : 120
      • langue: non
    • email
      • type: string
      • obligatoire : oui
      • validation: isEmail
      • longueur : 100
      • langue : non
    • description
      • type : string
      • obligatoire : non
      • validation: isCleanHtml
      • langue : oui

Voici l’aperçu des informations qui sont saisies pour générer ce modèle.
Les champs Field Type et Field Validation sont complétés automatiquement avec les informations nécessaires.

Le champs Field Type récupère les propositions depuis les types de classe situés dans le fichier classes/ObjectModel.php

Le champ Field Validation récupère les propositions à partir des fonctions de la classe classes/Validate.php

 

Génération de l’objet via la console

Suite à la saisie de ces informations le code suivant est généré automatiquement dans le fichier modules/hhdev/classes/Sample.php

 <?php
 /**
 * 2007-2019 PrestaShop
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/OSL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 * @author    PrestaShop SA <[email protected]>
 * @copyright 2007-2019 PrestaShop SA
 * @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 * International Registered Trademark & Property of PrestaShop SA
 * @generated by PrestashopConsole  
 * @copyright 2016-2019 Hennes Hervé http://www.h-hennes.fr/blog/
 */
 
 
if (!defined('_PS_VERSION_')) {
    exit;
}
 
class Sample extends ObjectModel
{
 
   /** @var int Object id */
    public $id;
 
    public $name;
public $firstname;
public $email;
public $description;
 
 
    public static $definition = [
        'table' => 'sample',
        'primary' => 'id_sample',
        'fields' => [ 
'name' => [ 'type' => self::TYPE_STRING,'validate' => 'isName', 'length' => 100, ], 
'firstname' => [ 'type' => self::TYPE_STRING,'validate' => 'isName', 'length' => 120, ], 
'email' => [ 'type' => self::TYPE_STRING,'validate' => 'isEmail', 'length' => 100, ], 
'description' => [ 'type' => self::TYPE_STRING,'validate' => 'isCleanHtml', 'lang' => true,], 
],'multilang' => true 
];
    //@Todo generate content
 
 
        /**
         * Model Sql installation
         * Add it in your module installation if necessary
         */ 
        public static function installSql(){
 
 Db::getInstance()->execute(
                "CREATE TABLE IF NOT EXISTS `ps_sample`(
`id_sample` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` VARCHAR (100) NOT NULL,
`firstname` VARCHAR (120) ,
`email` VARCHAR (100) NOT NULL,
 
        PRIMARY KEY (`id_sample`)
        )
        ENGINE=InnoDB DEFAULT CHARSET=UTF8;"
                );
 
 
 Db::getInstance()->execute(
                "CREATE TABLE IF NOT EXISTS `ps_sample_lang`(
`id_sample` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_lang` int(10) unsigned NOT NULL ,
`description` VARCHAR (255) 
,
        PRIMARY KEY (`id_sample`,`id_lang`)
        )
        ENGINE=InnoDB DEFAULT CHARSET=UTF8;"
                );
 
}
}

Le formatage du contenu du fichier est encore à améliorer, mais le code est bien fonctionnel.

Il est possible de facilement créer la table sql associée à ce modèle en appelant la fonction installSql() de celui-ci.

Pour gérer rapidement un crud dans l’administration il est possible d’utiliser la commande module:generate:controller en lui passant en paramètre le modèle. (cf. article précédent )

Ceci permettra d’afficher un listing et un formulaire de modification basiques pour saisir des informations sur votre objet nouvellement créé 🙂