− Table des matières
master_admin
est un module fournissant une interface web dédié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 destiné à ê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.
Il y a quatre sous-menus prédéfinis :
- 'toplinks' : les liens à afficher en premier dans le menu
- 'system' : le menu "Système"
- 'crud' : le menu "Gestion de données"
- 'refdata' : le menu "Données de références"
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 connexionmain.tpl
: affiche l'interface web principale.
Vous devez utiliser ce template dans votre objet réponse.
La commande jelix init-admin
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.