Raccourcis : Contenu - rubriques - sous rubriques
EN FR
Jelix 1.4.8

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 qu'il soit utilisable via l'interface d'administration

Si l'administration a un point d'entrée spécifique, comme admin.php par défaut, vous devez indiquer dans la configuration que ce module est accessible uniquement via ce point d'entrée.

Pour ce faire, dans la configuration (à la fois dans defaultconfig.ini.php et dans admin/config.ini.php), dans la section simple_urlengine_entrypoints, au niveau de la clé admin, vous devez ajouter votre module. Si il s'appelle adminactu par exemple, ça donne ça :


 [simple_urlengine_entrypoints]
 admin="jacl2db~*@classic, jauth~*@classic, jacl2db_admin~*@classic, jauthdb_admin~*@classic, master_admin~*@classic, adminactu~*@classic"

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é.

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 responses/. Ces réponses utilisent le template master_admin, et vous pouvez évidemment modifier ces objets pour les personnaliser.