3.2 Barre de menu
La barre de menu, présente en haut de la liste de documents, peut être entièrement personnalisée : ajout ou suppression de menus et d'items de menu. Ce paragraphe décrit comment paramétrer une instance ONEFAM pour gérer le contenu de la barre et des menus.
Le menu proposé dépend de la famille sélectionnée par l'utilisateur. Il faut donc définir une barre de menu par famille de document.
La barre de menus est décomposée en menu, eux même contenant des items, un item pouvant être un 'sous-menu'.
3.2.1 Déclaration de menus
3.2.1.1 La barre de menu
La définition de la barre de menu est faite via le paramètre applicatif ONEFAM_MENU (dans le fichier MYAPP_init.php.in). Il contient un objet menu encodé en JSON :
$menu = array( 'families' => array( '... fam 1 .... ' => .... menus declaration '... fam 2 .... ' => .... menus declaration '... fam 3 .... ' => .... menus declaration ) ); $app_const = array( .... "ONEFAM_MENU" => json_encode($menu), ... ); ...
Chaque famille est identifiée par son nom logique.
Il existe deux catégories de menu :
- les menus 'standard' proposés par défaut par l'application ONEFAM identifiés par le mot-clef standardMenu
- les menus personnalisés que vous définissez pour l'application repérés par le mot-clef customMenu
"my_family" => array( "standardMenu" => array( .... menus declaration ... ), "customMenu" => array( .... menus declaration ... ), ) ...
3.2.1.2 Le menu
La déclaration du menu est référencé par une clef menu-key.
"my_family" => array( "customMenu" => array( //... "menu-key" => array( "before" => "tools", "label" => "My Custom Menu", "items" => array( ... ) ) ...
Les caractéristiques du menu sont décrites au travers d'attributs (voir paragraphe [Attributs menu])
3.2.1.3 Bouton sur la barre de menu
Il est possible d'ajouter un bouton sur la barre de menu. Pour cela, il suffit de déclarer un menu sans attribut items et d'utiliser les attributs url et target.
"my_family" => array( "customMenu" => array( ... "menu-key" => array( "before" => "tools", "label" => "My Custom Menu", "items" => array( ... ) ), "button-menu" => array( "label" => "goto wiki", "url" => "http://fr.wikipedia.org/", "target" => "wiki" ) ...
3.2.1.4 Les items
La définition du contenu du menu consiste à déclarer et organiser les différents items qui le compose.
"my_family" => array( "customMenu" => array( ... "menu-key" => array( "before" => "tools", "label" => "Wikipedia", "items" => array( "wiki-fr" => array( "label" => "français", "url" => "http://fr.wikipedia.org/", "target" => "wiki" ), "wiki-en" => array( "label" => "english", "url" => "http://en.wikipedia.org/", "target" => "wiki" ), "help" => array( "label" => "aide", "url" => "javascript:openHelpWindow()" ), ... ) ...
Dans l'exemple précédent, le menu menu_key est composé de 2 items wiki-fr et wiki-en, dont les libellés affichés sont générés par la traduction des clefs, respectivement, français et english. En cliquant sur un des items, l'url spécifiée par l'attribut url est affichée dans la fenêtre indiquée par l'attribut target.
Au lieu de déclencher une URL, vous pouvez activer du code Javascript. Pour cela, l'expression de l'attribut url doit débuter par le mot-clef javascript:. La partir de la valeur de l'attribut url suivant le mot-clef est évalué.
L'ajout d'un item de menu inactif (label séparateur par exemple), est exprimé en spécificiant un item de menu sans URL (url) à déclencher ni cible (target) ni item (items).
Un item de menu peut déclarer un attribut items. Il s'agit alors d'un sous- menu.
3.2.2 Règles générales
3.2.2.1 Attributs applicables aux menus et items
before : (menu)
Positionner le menu avant celui indiqué par la valeur de l'attribut beforeclass : (menu|item)
Indique quelle classe CSS est appliquée au menu ou à l'item (balise HTML <a>).custom : (menu)
Permet d'ajouter des items à un menu standard. La structure est la même que pour l'attribut items.items : (menu|item)
Déclare les items composant le menu.
Il est possible de composer des sous-menu en déclarant des items sur un item.
Si l'attribut items n'est pas présent (y compris sur un menu de premier niveau), le comportement du bouton est spécifié par les attributs : url et href.label : (menu|item)
Clef de traduction du libellé présentée à l'utilisateur (cf. § Traductions).target : (menu|item)
Cible (fenêtre) dans laquelle l'URL déclenchée est affichée.
La valeur par défaut de target est _self.
Si la cible vaut *_self*, l'affichage se fait alors dans la fenêtre courante.url : (menu|item)
URL activée lors de la sélection par l'utilisateur de l'item de menu.
Si l'url débute par le mot-clef javascript: la partie suivant le mot-clef est évaluée en javascript. Dans ce cas, le contenu de l'attribut target n'est pas utilisé.
3.2.2.2 Traductions
Les labels de menu ou d'item sont utilisés comme clef de traduction. Si une traduction est trouvée dans le catalogue, elle est affichée, sinon la clef est présentée. Les labels sont donc limités à des caractères us-ascii (non accentués).
3.2.2.3 Les clefs (menu et items)
Les caractères utilisables pour les clefs de menu ou d'item sont :
- les lettres majuscules, minuscules
- les chiffres
- les caractères _ (trait bas), - (tiret)
3.2.2.4 Utilisation d'attributs non réservés
Vous pouvez utiliser des attributs non réservés dans la définition de menu ou d'item. Ils ne sont pas interprétés et produisent un attribut sur la balise HTML du menu ou de l'item.
Par exemple :
"menu-key" => array( "before" => "tools", "label" => "Wikipedia", "items" => array( "wiki-fr" => array( "label" => "français", "lang" => "FR_fr", "url" => "http://fr.wikipedia.org/", "target" => "wiki" ),
produira : <a .... lang="FR_fr" ....>
.
3.2.3 Gestion de la barre de menu
3.2.3.1 Menus standard
Par défaut, le menu suivant est mis en place :
- create : menu de création de document de la famille sélectionné
- sort : fonctions de tri de la liste des documents
- tools : différents outils
Le menu create est composé dynamiquement en fonction des familles utilisées dans l'instance. Par conséquent, ce menu est peut seulement être supprimé.
Le menu sort est lui aussi produit dynamiquement en fonction des attributs de la famille affichée notés comme triables. Il peut seulement être supprimé.
Note : Les menus de filtre par énumérés sont affichés/non affichés via l'option "bmenu=yes/no" de l'attribut. La clef de l'item du menu est le nom de l'attribut énuméré. Ils peuvent seulement être supprimés.
Le menu tools est composé des items suivant :
- newsearch : nouvelle recherche
- newreport : nouveau rapport
- memosearch : mémoriser la recherche
- viewsearch : voir mes recherches
- folders : accès à l'application Doc Admin
- prefs : préférences de présentation ONEFAM
3.2.3.1.1 Ajout d'un item
Pour ajouter des items à un menu standard, il faut renseigner l'attribut "custom". Cet attribut fonctionne comme items. Les items définis seront placés suite aux items prédéfinis du menu standard.
L'exemple ci-dessous supprime folders du menu standard tools et lui ajoute un sous menu d'accès à wikipedia, choix selon la langue.
"my-family" => array( "standardMenu" => array( "tools" => array( "deleted" => array( 'folders' ), "custom" => array( "wikis" => array( "label" => "Wikipedia", "items" => array( "wiki-fr" => array( "label" => "français", "url" => "http://fr.wikipedia.org/", "target" => "wiki" ), ...
3.2.3.1.2 Suppression d'un item
La suppression d'un item est réalisée en le décrivant et en utilisant l'attribut deleted.
"my-family" => array( "standardMenu" => array( "tools" => array( "deleted" => array( 'folders', 'memosearch' ), ), ...
3.2.3.1.3 Suppression d'un menu
Pour supprimer un menu standard complètement, il doit être décrit dans la structure de spécification des menus. L'attribut deleted est positionné à all.
"my-family" => array( "standardMenu" => array( "sort" => array( "deleted" => "all" ), ...
3.2.3.2 Menus personnalisés
Les menus personnalisés sont adressés par le mot clef customMenu dans la structure de déclaration des menus.
3.2.4 Limites
- Il n'est pas possible de gérer le contenu d'un menu en fonction de droits applicatifs ou documentaires.
- La déclaration de menus présents pour toutes les familles n'est pas disponible.