Base de connaissance Apps Panel

S’abonner

Création d'un module personnalisé dans le BO

Introduction

L’exemple qui va suivre servira à illustrer tout ce tutoriel :

On part du principe que la base de données de notre application contient une table nommée "users" qui correspond à une liste de personnes. Nous voulons dans le BO une action nommée « users » qui affiche la liste entière des utilisateurs avec tous leurs champs rattachés. Un bouton "ajouter" permet d’accéder à un formulaire pour ajouter un nouvel utilisateur, et on peut également modifier et supprimer les utilisateurs existants.

Un menu « Gestion des utilisateurs » sera présent dans le menu de la sidebar du BO, et devra emmener sur :

https://backend.appspanel.com/project_name/users 

De manière générale, les urls du BO sont :  

https://backend.appspanel.com/nom_module/nom_action

 

Une archive est disponible en pièce jointe de ce tutoriel comprenant l'ensemble des fichiers de bases nécessaire à la mise en place d’un module personnalisé dans le BO. Il est donc nécessaire de la télécharger.

Télécharger l'archive

 

Création des classes 

Il va falloir créer des classes dédiées aux actions(vues) personnalisées du BO. Ces classes devront hériter de la classe parente abstraite \BO.

Ces nouvelles classes devront être situées dans le dossier ./classes/bo (créer le sous-dossier « bo » si celui-ci n’existe pas dans votre projet). 

Pour reprendre l’exemple ci-dessus, on va créé un fichier Users.php. Récupérez le fichier dans l’archive « Myaction.php » et le renommer le en conséquence.

Modifiez le nom de la classe, les attributs $table, $primary_key et $fields de ce fichier.

Ce fichier contient les méthodes de base fonctionnelles pour afficher la liste des utilisateurs grâce à la méthode getList() et les méthodes CRUD qui sont get(), post(), put() et delete().

Libre à vous de réécrire ces méthodes pour un comportement plus spécifique à vos besoins, ou d'en ajouter d'autres.

 

Création du dossier ./bo 

Créez ensuite un dossier nommé « bo » à la racine du projet.

Dans ce dossier « bo », créez un sous-dossier « modules ». Ce nouveau dossier contiendra tous les modules personnalisés à rattacher au BO. 

Chacun de vos modules devra correspondre à un dossier dans ./bo/modules. 

Concernant les bonnes pratiques, il n'est pas forcement utile de créer plusieurs modules, un seul contenant plusieurs actions est en général suffisant. Nous recommandons de nommer le module comme le projet, afin d’éviter d’utiliser un nom de module qui serait susceptible d’être déjà utilisé par le BO.

Ainsi l'arborescence devrait ressembler à : ./bo/modules/project_name

Une fois le dossier du module créé, il doit être au minimum composé de la sorte :

  • un fichier « actions.class.php »
  • un fichier « list.tpl.php »

Ces 2 fichiers sont à récupérer dans l'archive.

 

Fichier actions.class.php

Le fichier actions.class.php doit être modifié de la sorte :

  • le nom de la classe doit être {nom_module}Actions
  • l’attribut $module = {nom_module}
  • l’attribut $classes doit être un array faisant le match entre les actions du modules et les classes créées dans ./app/classes/bo/

Dans notre exemple, nous avons une action nommée "users" de notre module nommé "project_name". L'attribut $classes ressemblera à ceci :


    protected $classes = array(
        'users' => ‘\BO\Users', 
        );

 

Le fichier actions.class.php se compose ensuite comme suit : 

  • une méthode portant le nom de l’action (dans notre exemple « users » donc). Dans cette méthode on peut définir la liste des champs à afficher ainsi que leur libellé.
  • une méthode getExtraFields() : Cette méthode est appelée pour les formulaires de saisis (ajout ou modification), c’est ici que l’on peut modifier le type de champs à afficher dans le formulaire (de base tous les champs sont des input de type « text »).

 

Fichier list.tpl.php

Le fichier list.tpl.php est le fichier de template. Il affichera de base une vue en liste avec un bouton « Ajouter », et les fonctionnalités « Modifier » et « Supprimer » sur chacune des lignes listées.

 Libre à vous de créer plusieurs templates différents. Pour cela:

  • dupliquez le fichier "list.tpl.php"
  • renommez le de la sorte : "nom_de_mon_template.tpl.php"
  • dans le fichier actions.class.php, rajoutez dans la méthode de l'action correspondante : $this->tpl = 'nom_de_mon_template';
  • La vue de cette action sera rendue avec votre template personnalisé.

 

Fichier hide.php

Toujours dans le dossier ./bo, créez le fichier suivant : hide.php (présent dans l’archive en pièce jointe) 

hide.php va servir à masquer certains champs que l’on ne veut pas voir apparaitre dans le BO dans les formulaires d’insertion et de modification d’éléments (dans notre exemple : le champ id de la table user est une clef primaire auto-increméntée et n’a rien à faire dans les formulaires d'ajout et de modification d'un utilisateur, on veut donc le masquer).

Voici comment doit se composer le fichier : 


$hide = array(
 	‘{nom_table}_{nom_du_champ}’,
	…
);

 

NB : Cela masquera uniquement les champs dans les formulaires de saisis. L’affichage des champs dans la vue principale (liste des éléments) est géré dans la méthodes de l'action du fichier actions.class.php.

 

Fichier nav.xml.php

Toujours dans le dossier ./bo, créer le fichier suivant : nav.xml.php 

Le fichier nav.xml.php représente le menu de la sidebar tout à gauche dans le BO. On peut donc le modifier pour rajouter ses propres catégories qui pointent sur des vues.

On peut rajouter dans ce fichier entre les balises <menu></menu> d’autres <folder> et/ou  directement des <node> afin de hiérarchiser le menu comme on le souhaite.

Dans notre exemple toujours, on var créer le noeud suivant : 

<node module="project_name" action="users" label="Gestion des utilisateurs"/> 

Il est important de bien renseigner les attributs « module » et « action » du <node> créé : le premier attribut correspond au module qui sera rattaché à la vue (le nom du projet certainement), et l’attribut « action » à la méthode appelé dans ce module.

 

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 0 sur 0
Vous avez d’autres questions ? Envoyer une demande