− Table des matières
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 conçernant 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 deux propriétés: title
and content
.
Donc, vous devez fournir un titre et un contenu html pour chaque "information box" que vous souhaitez ajouter au tableau de bord.
class newsdashboardListener extends jEventListener {
function onmasterAdminGetDashboardWidget ($event) {
$box = new masterAdminDashboardWidget();
$box->title = "Latest news";
$box->content = jZone::get("adminactu~latest");
$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 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.