VI. Tutoriels communautaires

Ajout d'un champ dans un module

Dernière mise à jour : 25/03/2023 à 06h44

Introduction


Il est possible d'ajouter des champs assez simplement pour les modules en MVC (exemple : articles, news, calendrier, livre d'or), le tout n'étant évidemment pas d'ajouter uniquement une information à saisir dans le formulaire, mais également afficher cet élément à l'endroit voulu.

Vous n'avez besoin d'aucune connaissance particulière en programmation, mais il va falloir être méthodique dans la procédure à suivre pour mettre en place le nouvel élément.

Les ajouts peuvent être effectués avec un simple éditeur de texte (exemple : notepad++).

La mise en place du nouveau champ se fait en 3 étapes : Modification de l'objet du module, ajout de variables de langue et création du champ dans le formulaire de saisie.

Dans cette exemple nous nous appuierons sur le module articles, avec l'ajout d'un champ "Activer les commentaires" (pour pouvoir choisir d'afficher ou non les commentaires pour chaque article).

Mise en place du nouveau champ


Objet principal du module et insertion en base de données


Editez tout d'abord le l'objet principal du module. Dans le cas du module articles, il s'agit du fichier /articles/services/Article.class.php.

Il faut ici créer la variable correspondant à votre nouveau champ, créer les méthodes get et set pour le récupérer et le modifier, l'ajouter à la fonction pour récupérer ou ajouter les différents paramètres, et enfin ajouter une variable dans la liste des variables envoyées au template.

Exemple dans notre cas :

Code PHP :
 
...
    private $comments_enabled;
...
    public function get_comments_enabled()
    {
        return $this->comments_enabled;
    }
    public function set_comments_enabled($enabled) 
    {
        $this->comments_enabled = $enabled;
    }
...
    public function get_properties()
    {
        return array(
            ...
            'comments_enabled' => $this->get_comments_enabled(),
            ...
        );
    }
    public function set_properties(array $properties)
    {
        ...
        $this->set_comments_enabled($properties['comments_enabled']);
        ...
    }
    /* Ajoutez ceci si vous souhaitez cocher la case ou remplir une valeur par défaut dans d'autres cas */
    public function init_default_properties($id_category = Category::ROOT_CATEGORY)
    {
        ...
        $this->comments_enabled = true;
        ...
    }
...
    /* Ajout d'une variable dans la liste des variables envoyées aux templates */
    public function get_tpl_vars()
    {
        ...
        return array(
            ...
            'C_ARTICLE_COMMENTS_ENABLED' => $this->get_comments_enabled(),
            ...
        );
    }
...
 


Editez ensuite le fichier d'installation du module. Dans le cas du module articles, il s'agit du fichier /articles/phpboost/ArticlesSetup.class.php.

Ajoutez votre champ dans la méthode create_table() (dans le cas du module articles : create_articles_table()) pour qu'il soit créé à l'installation. Dans certains modules on trouve également la méthode insert_data() pour l'objet créé par défaut, pensez à le mettre à jour aussi dans ce cas là.

Exemple dans notre cas :
Code PHP :
 
...
    private function create_articles_table()
    {
        $fields = array(
            ...
            'comments_enabled' => array('type' => 'boolean', 'notnull' => 1, 'default' => 1),
            ...
        );
        ...
    }
...
    /* Ajout du paramètre pour l'article par défaut */
    private function insert_articles_data()
    {
        PersistenceContext::get_querier()->insert(self::$articles_table, array(
            ...
            'comments_enabled' => true,
            ...
        );
    }
...
 

Si vous avez déjà installé le module, il va falloir ajouter le champ en base de données via une requête SQL :

ALTER TABLE nom_table ADD nom_colonne type_donnees


Exemple dans notre cas :
Code SQL :
ALTER TABLE phpboost_articles ADD comments_enabled TinyInt NOT NULL DEFAULT 1;


Variables de langue


Il va falloir créer une variable de langue pour son titre dans le formulaire.

Editez le fichier /articles/lang/french/common.php et ajoutez une variable de langue du type :

Code PHP :
$lang['mavariable'] = 'ma variable';


Exemple dans notre cas :

Code PHP :
 
...
    $lang['articles.form.comments_enabled'] = 'Autoriser les commentaires sur l\'article';
...
 


Si vous souhaitez ajouter une explication sous le titre dans le formulaire, ajouter une deuxième variable :

Code PHP :
$lang['mavariable.explain'] = 'explication de ma variable';


Vous pouvez répéter l'opération pour la langue anglaise si besoin.

Formulaire


Editez ensuite le formulaire du module. Dans le cas du module articles, il s'agit du fichier /articles/controllers/ArticlesFormController.class.php.

Ajoutez votre champ dans la méthode build_form() pour l'afficher et dans la méthode save() pour l'enregistrer.

Exemple dans notre cas :

Code PHP :
 
...
    private function build_form(HTTPRequestCustom $request)
    {
        ...
        /* Ligne 128 */
    $other_fieldset->add_field(new FormFieldCheckbox('comments_enabled', $this->lang['articles.form.comments_enabled'], $this->get_article()->get_comments_enabled()));
        ...
    }
...
    private function save()
    {
        ...
        /* Ligne 304 */
        $article->set_comments_enabled((bool)$this->form->get_value('comments_enabled'));
        ...
    }
...
 


Conclusion


Vous pouvez maintenant afficher votre nouveau champ directement dans les templates du module.

Exemple dans notre cas : Editer le fichier /articles/templates/ArticlesDisplayArticlesController.tpl ou copiez le dans votre thème avant de le faire.

Code TPL :
 
...
    <!-- Remplacez les lignes 25 à 27 par -->
    # IF C_COMMENTS_ENABLED #
        # IF C_ARTICLE_COMMENTS_ENABLED #
            &nbsp;|&nbsp;<i class="fa fa-comment" title="${LangLoader::get_message('comments', 'comments-common')}"></i><a itemprop="discussionUrl" class="small" href="{U_COMMENTS}">&nbsp;{L_COMMENTS}</a>
        # ENDIF #
    # ENDIF #
...
    <!-- Remplacez les lignes 92 à 94 par -->
    # IF C_COMMENTS_ENABLED #
        # IF C_ARTICLE_COMMENTS_ENABLED #
            # INCLUDE  COMMENTS #
        # ENDIF #
    # ENDIF #
...
 


Voilà votre champ ajouté et opérationnel.

Ces différentes étapes peuvent être adaptées pour tout type de champ et pour tout module en MVC.

Ces modifications seront à refaire en cas de mise à jour du module en question par l'équipe.
Cette page a été vue 2826 fois