Raccourcis : Contenu - rubriques - sous rubriques
EN FR
Jelix 1.7.0-rc.1

Section: master_admin

^ Les modules de Jelix
Changer de langue : EN

master_admin est un module fournissant une interface web dediée à l'administration (backend).

Avant de commencer la personnalisation de l'interface d'administration, vous devez la créer.

Le module contient trois zones :

  • admin_menu : un système de menu
  • dashboard : un tableau de bord
  • admin_infobox : une zone d'information sur l'utilisateur

l'action default:index affiche le tableau de bord

Activer un module pour l'interface d'administration

Pour activer un module, vous devez bien sûr indiquer qu'il est utilisé dans la section modules de la configuration, mais vous devez aussi indiquer par quel point d'entrée il est accessible.

Si l'administration a un point d'entrée spécifique, comme admin.php par défaut, et si votre module est déstiné à être utilisé dans cette interface d'administration, vous devez indiquer dans le fichier urls.xml, dans la section correspondante à ce point d'entrée, les urls permettant d'accéder au module.

Par exemple, voici une configuration basique dans le fichier var/config/urls.xml, pour une interface d'administration dans laquelle vous voulez gérer les utilisateurs et les droits avec les modules jauthdb_admin et jacl2db_admin :


 <entrypoint name="admin">
     <url pathinfo="/" module="master_admin" action="default:index" />
     <url module="master_admin"/>
     <url module="jauth"/>
     <url module="jacl2db"/>
     <url module="jauthdb_admin"/>
     <url module="jacl2db_admin"/>

     <!-- ainsi que vos propres modules d'admin: -->
     <url module="adminactu" />
 </entrypoint>

Note : vous devriez avoir toujours des modules uniquement dédiés à l'admin, et des modules dédiés uniquement à la partie publique du site. Il est déconseillé donc d'avoir des contrôleurs pour l'admin et des contrôleurs pour la partie public du site, dans un même module. Cela facilite la configuration de la sécurité.

Si vous voulez utiliser un module à la fois dans l'administration et dans la partie publique du site (comme le module jauth), vous devez créer deux applications, plutôt que deux points d'entrées.

Utilisation du système de menu

la zone admin_menu affiche un menu. Ce menu contient en fait des sous-menus, et les sous-menus contiennent des éléments. Chaque élément et sous-menu a un id.

Si vous voulez ajouter des éléments ou sous-menus, vous devez créer un listener pour l'évènement masteradminGetMenuContent.

Imaginez que vous avez un module "adminactu", et souhaitez ajouter un élément de menu à votre contrôleur CRUD pour gérer les actualités. Dans adminactu/events.xml :


<events xmlns="http://jelix.org/ns/events/1.0">
   <listener name="news">
       <event name="masteradminGetMenuContent" />
   </listener>
</events>

Et dans adminactu/classes/news.listener.php, vous devriez retourner à l'évènement l'objet masterAdminMenuItem pour chaque élément que vous voulez ajouter:


class newsListener extends jEventListener{

   function onmasteradminGetMenuContent ($event) {
        $event->add(new masterAdminMenuItem('news', "manage news", jUrl::get('adminactu~admin:index'), 30, 'general'));
        $event->add(new masterAdminMenuItem('newscat', "manage news catagories", jUrl::get('adminactu~admincat:index'), 31, 'general'));
        $event->add(new masterAdminMenuItem('newssearch', "search news", jZone::get('adminactu~search'), 32, 'general', 'zone'));
   }
}

Voici les paramètres pour masterAdminMenuItem pour ajouter un lien :

  • un id pour l'élément du menu
  • un libellé pour le lien
  • une url pour le lien
  • l'ordre dans le sous-menu
  • l'id du sous-menu où ajouter des éléments. Par défaut il y a deux sous-menus : 'toplinks' et 'system'.

Si au niveau de l'item de menu, vous voulez ajouter n'importe quel contenu HTML à la place d'un simple lien, indiquez plutôt ces paramètres :

  • un id pour l'élément du menu
  • une chaîne vide
  • le contenu HTML
  • l'ordre dans le sous-menu
  • l'id du sous-menu où ajouter des éléments. Par défaut il y a deux sous-menus : 'toplinks' et 'system'.
  • Le type du contenu, 'content', pour indiquer qu'il s'agit d'un contenu HTML.

Vous pouvez ajouter des nouveaux sous-menus. Créer simplement un objet masterAdminMenuItem, où l'id du sous-menu est vide.

Utilisation de l'infobox

En haut à droite de l'interface utilisateur de master_admin, il y a la zone admin_infobox. Cette zone affiche le nom de l'utilisateur, un lien vers son profil, et un lien pour se déconnecter. Vous pouvez rajouter d'autres liens ou informations concernant l'utilisateur dans cette zone. Il faut pour cela répondre à l'évènement masteradminGetInfoBoxContent, en renvoyant une liste d'objets masterAdminMenuItem.

Rajoutons cet évènement dans le fichier adminactu/events.xml :


<events xmlns="http://jelix.org/ns/events/1.0">
   <listener name="news">
       <event name="masteradminGetMenuContent" />
       <event name="masteradminGetInfoBoxContent" />
   </listener>
</events>

Et dans la classe newsListener, rajoutons la méthode onmasteradminGetInfoBoxContent, qui va renvoyer un item pour afficher un lien vers la liste des news postées par l'utilisateur.


class newsListener extends jEventListener{
   //....


   function onmasteradminGetInfoBoxContent ($event) {

        $event->add(new masterAdminMenuItem('news', "Your own news", jUrl::get('adminactu~admin:usernews')));
  
   }
}

Utilisation du dashboard

Un tableau de bord est souvent utile dans l'administration d'un site web. C'est souvent la page de démarrage pour ce genre d'application, qui affiche des informations diverses et variées.

Chaque module peut afficher des informations sur le tableau de bord. Ils doivent écouter l'évènement masterAdminGetDashboardWidget, et ajouter un ou plusieurs objets masterAdminDashboardWidget à l'évènement, lesquels déclarent un contenu "widget". Cet objet est très simple, il a trois propriétés: title, content et order

Donc, vous devez fournir un titre et un contenu html pour chaque "information box" que vous souhaitez ajouter au tableau de bord, et l'ordre de tri d'affichage de ce contenu.


class newsdashboardListener extends jEventListener {

   function onmasterAdminGetDashboardWidget ($event) {

        $box = new masterAdminDashboardWidget();
        $box->title = "Latest news";
        $box->content = jZone::get("adminactu~latest");
        $box->order = 1;

        $event->add($box);
   }
}

Templates

Le module contient deux templates:

  • index_login.tpl: affiche le formulaire de connexion
  • main.tpl: affiche l'interface web principale.

Vous devez utiliser ce template dans votre objet réponse. La commande jelix initadmin crée par défaut deux objets réponse, adminHtmlResponse et adminLoginHtmlResponse dans votre répertoire app/responses/. Ces réponses utilisent le template master_admin, et vous pouvez évidemment modifier ces objets pour les personnaliser.