Les menus pour les interfaces extui

Spécification du menu xml

Les menus relatif aux documents peuvent être déclarés dans un fichier xml. Un menu est constitué d'éléments de menu “itemmenu” de type “menu” ou “separator”. Ces élements de menu peuvent être placé directement dans la balise principale “menu” ou dans des sous-balises de “itemlistmenu”. L'attribut “id” des “itemmenu” et des “itemlistmenu” est obligatoire.

<!ELEMENT menu ((itemmenu|itemlistmenu)+)>
<!ELEMENT itemlistmenu (label?,icon?,itemmenu+)>
<!ELEMENT itemmenu (label?,icon?,control*,ext?,confirm?,url?)>
<!ELEMENT label (#PCDATA)>
<!ELEMENT icon EMPTY>
<!ELEMENT control EMPTY>
<!ELEMENT ext EMPTY>
<!ELEMENT url EMPTY>
<!ELEMENT confirm (label,continue?,cancel?)>
<!ELEMENT continue (#PCDATA)>
<!ELEMENT cancel (#PCDATA)>
 
 
<!ATTLIST itemlistmenu id CDATA #REQUIRED>
<!ATTLIST itemmenu id CDATA #REQUIRED>
<!ATTLIST itemmenu target CDATA #IMPLIED>
<!ATTLIST itemmenu type (menu|separator) "menu">
<!ATTLIST itemmenu useselection  (yes|no) "no">
<!ATTLIST icon src CDATA #REQUIRED>
<!ATTLIST url href CDATA #REQUIRED>
<!ATTLIST ext file CDATA #REQUIRED>
<!ATTLIST ext class CDATA #REQUIRED>
<!ATTLIST control privilege CDATA #IMPLIED>
<!ATTLIST control method CDATA #IMPLIED>
<!ATTLIST control object CDATA #IMPLIED>
<!ATTLIST control visibility (hidden|visible|disabled) #REQUIRED>
<!ATTLIST itemmenu visibility (hidden|visible|disabled) "visible">
<!ATTLIST menu id CDATA #REQUIRED>

Lien vers une url

Lien statique :

<itemmenu id="view" target="_blank">
	<label>[TEXT:test:To my site]</label>
	<url="http://www.example.org"/>
</itemmenu>

Lien vers une action de l'application. :!: Les & doivent être remplacé par des &amp; pour que le xml soit valide. Vous pouvez utiliser le même format des parties variables (entre %) que lorsque vous définissez les liens dans les documents

<itemmenu id="view" target="_blank">
	<label>[TEXT:test:Action one]</label>
	<url="?app=ZOO&amp;action=ZOO_ACTIONONE&id=%ID%"/>
</itemmenu>

L'attribut target défini le nom de la fenêtre vers lequel envoyer votre lien. Le nom “_blank” indique l'ouverture d'une nouvelle fenêtre. Le nom “_self” indique l'ouverture dans la fenêtre courante. Le nom “_document” indique l'ouverture d'une fenêtre de type document.

Appel d'un code javascript

Contrôle de la visibilité

La visibilité du menu peut être rendu conditionnel suivant les règles de contrôle. La visibilité par défaut est “visible” sur les “itemmenu”. Vous pouvez changer la visibilité par défaut sur la valise “itemmenu” en modifiant l'attribut “visibility”. Le contrôle est applicable sur le document faisant référence au menu ou sur le dossier (optionnel) où se trouve le document. La vérification d'un droit sur le document se fait par l'attribut “privilege”.

Édition si l'utilisateur a le droit “edit” :

<itemmenu id="edit" target="_document" visibility="hidden">
	<label>[TEXT:eui:Edit document]</label>
	<control privilege="edit" visibility="visible"/>
	<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.EditDocument"/>
</itemmenu>

Il possible de modifier la visibilité suivant le retour d'une méthode du document. Vous pouvez utiliser les méthodes de la classe doc ou pour un menu spécifique utiliser les méthodes spécifiques de votre classe documentaire. Si la méthode retourne “true” alors la visibilité est changée. L'appel de la méthode peut être préfixé par ”!” pour indiquer la négation de celle-ci. Action si le document n'est pas verrouillé :

<itemmenu id="edit" target="_document" visibility="hidden">
	<label>[TEXT:tst:Action two]</label>
	<control method="!isLock()" visibility="visible"/>
	<url = "?app=ZOO&amp;action=ACTIONTWO&amp;=%ID%"/>
</itemmenu>

Action si le document est une recherche temporaire ($this→doctype==“T”) and ($this→defdoctype==“S”) Plusieurs controles peuvent être enchainés. Il sont tous exécutés les uns à la suite des autres dans l'ordre du xml.

<itemmenu id="edit" target="_document" visibility="hidden">
	<label>[TEXT:tst:Action two]</label>
	<control method="equal(doctype,'T')" visibility="visible"/>
	<control method="!equal(defDoctype,'S')" visibility="hidden"/>
	<url = "?app=ZOO&amp;action=ACTIONTWO&amp;=%ID%"/>
</itemmenu>

Exemple complet

Exemple complet extrait du menu contextuel d'un document par défaut

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE menu SYSTEM "menu.dtd">
<menu id="context">
	<itemlistmenu id="docctx">
		<label>[TITLE]</label>
		<icon src="[ICON]"></icon>
		<itemmenu id="view" target="_document">
			<label>[TEXT:eui:View Document]</label>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.ViewDocument"/>
		</itemmenu>
		<itemmenu id="edit" target="_document" visibility="hidden">
			<label>[TEXT:eui:Edit document]</label>
			<control method="!canEdit()" visibility="visible"/>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.EditDocument"/>
		</itemmenu>
		<itemmenu id="delete" target="_self" visibility="hidden" useselection="yes">
 
			<label>[TEXT:eui:Delete]</label>
			<control privilege="delete" visibility="visible"/>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.Delete"/>
			<confirm>
				<label>[TEXT:eui:Sure delete ?]</label>
				<continue>[TEXT:eui:Delete]</continue> 
				<cancel>[TEXT:eui:Cancel deletion]</cancel> 
			</confirm>
		</itemmenu>   
		<itemmenu id="remove" target="_self" visibility="hidden" useselection="yes">
			<label>[TEXT:eui:Remove from folder]</label>
			<control object="folder" privilege="modify" visibility="visible"/>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.RemoveFromFolder"/>
			<confirm>
				<label>[TEXT:eui:Sure remove from folder ?]</label>
				<continue>[TEXT:eui:Remove from folder]</continue> 
				<cancel>[TEXT:eui:Cancel remove]</cancel> 
			</confirm>
		</itemmenu>     
		<itemmenu id="copy" target="_self" visibility="hidden">
			<label>[TEXT:eui:Duplicate document]</label>
			<control object="folder" privilege="modify" visibility="visible"/>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.Duplicate"/>
		</itemmenu>    
		<itemmenu id="lock" target="_self" visibility="hidden" useselection="yes">
			<label>[TEXT:eui:Lock]</label>
			<control method="canLock()" visibility="visible"/>
			<control method="isLocked()" visibility="hidden"/>
			<!--<icon src="lock.png"/>-->
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.Lock"/>
		</itemmenu>  
		<itemmenu id="unlock" target="_self" useselection="yes">
			<label>[TEXT:eui:Unlock]</label>
			<control method="!isLocked()" visibility="hidden"/>
			<control method="!canUnLock()" visibility="hidden"/>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.Unlock"/>
		</itemmenu>
		<itemmenu id="sep" type="separator"/>
		<itemmenu id="histo" target="_history">
			<label>[TEXT:eui:Historic]</label>
			<script file="lib/ui/fdl-interface-action-common.js" class="Fdl.InterfaceAction.Historic"/>
		</itemmenu>
 
	</itemlistmenu>
 
</menu>

Afficher un menu sur l'interface

Surcharger la barre de menu sur le document

Surcharger le menu contextuel sur un document

Surcharger le menu contextuel sur une sélection de documents

Surcharger un menu sur le contenu d'une collection

freedom_3.1/devel/menu.txt · Dernière modification: 09/04/2010 09:59 (édition externe)