Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Template rdf

Vous pouvez utiliser des sources de données au FormatRdf pour peupler vos composants comme les arbres, les listes, les menus etc..

Pour cela, il faut utiliser la balise <template> et associées.

Tutoriels

Il y a tout d'abord la section correspondante dans le tutoriel.

Pour ceux qui veulent approfondir le sujet, il y aussi le tutoriel Comment réussir ses gabarits

exemples

Des exemples de template sont visible sur le site de xulplanet :

D'autres exemples utilisant des sources de données RDF distantes générées en PHP :

Notes sur l'utilisation avancées de templates

Notification de chargement de fichier RDF

Les sources RDF sont chargés de manière asynchrone. Si on veut accéder aux éléments générés par le template, il faut savoir alors quand le RDF est fini d'être chargé et le template appliqué.

ToDo : à compléter.

l'appel d'un template via l'attribut "template"

Au lieu de déployer tout le tag template et ses différent élément sous l'élément XUL incriminé, il s'agit de simplement ajouter l'attribut template="idTemplate" dans le dit élément XUL :

Exemple d'utilisation de l'attribut template : (bout de code de browser.xul de firefox version 1.0.4)

  <menu id="bookmarks-menu" label="&bookmarksMenu.label;"
      accesskey="&bookmarksMenu.accesskey;"
      datasources="[[rdf:bookmarks]] [[rdf:files]] [[rdf:localsearch]]"
      ref="NC:BookmarksRoot" flags="dont-test-empty"
      template='bookmarks-template'
      infer="forward-proxy"
      ...

Il s'agira ensuite de bien spécifier l'id du template en attribut comme on le fait avec les éléments XUL. La définition du template pourra dès lors être extérieur, et réutilisée par d'autres élément XUL.

Exemple d'assignation d'id à un template : (bout de code de browser.xul de firefox version 1.0.4)

   ...
   <template id='bookmarks-template' [[xmlns:nc="http://home.netscape.com/NC-rdf#"]]>
    <rule parent="hbox" [[rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator"]]>
    ...

l'attribut parent

Il permet de tester quel est l'élément XUL parent dans lequel le template va ajouter du code XUL.

Très utile pour 2 raisons : # Empêcher la récursion par défaut du Template Builder. # En combinaison avec l'appel de template par id, permet de spécifier le comportement d'un template suivant quel élement l'appelle.

Exemple d'assignation d'utilisation de "parent" : (bout de code de browser.xul de firefox version 1.0.4)

  <template id='bookmarks-template' [[xmlns:nc="http://home.netscape.com/NC-rdf#"]]>
    <rule parent="hbox" [[rdf:type="http://home.netscape.com/NC-rdf#BookmarkSeparator"]]>
      <toolbarseparator uri="rdf:*"
                        [[rdf:type="rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/]]>
    </rule>
    <rule parent="hbox" [[rdf:type="http://home.netscape.com/NC-rdf#Livemark"]]>
      <toolbarbutton type="menu" class="bookmark-item" uri="rdf:*" editable="true"
                     [[rdf:type="http://home.netscape.com/NC-rdf#Folder]]"
                     label="[[rdf:http://home.netscape.com/NC-rdf#Name]]"
                     livemark="true"
                     chromedir="&locale.dir;">
        <menupopup contextmenu="bookmarks-context-menu"/>
      </toolbarbutton>
    </rule>
    ...

Notons que cet attribut se met dans le tag "rule" cela uniquement dans l'utilisation de la syntaxe simplifié des templates ! (celle n'utilisant pas les tag conditions / bindings / actions). Dans la syntaxe complexe, vous pouvez utiliser la même fonctionnalité mais en mettant l'attribut "tag" dans le tag "content"... Celui ci possède alors donc 2 attributs le "uri" qui est obligatoire, et l'attribut "tag" qui a exactement le même sens que l'attribut parent de l'élément "rule" dans la syntaxe simplifiée.

L'attribut tag

Trier les sorties dans la syntaxe complète, se fait directement sur les variables "?nomVar". Ainsi :

Exemple : use of attribute "tag" in tag content and sorting on a content variable name...

        <tree id="treeExample"
              flex="1"
	      datasources="[[rdf:null]]"
	      allownegativeassertions="false"
	      flags="dont-build-content">
	  <treecols >
	    <treecol id="labelTreeCV"
		     primary="true"
		     class="sortDirectionIndicator"
		     sortDirection="ascending"
		     sortActive="true"
		     sort="?nom"/>
	    <splitter class="tree-splitter"/>
	    <treecol id="uriTreeCV"
		     hideheader="true"
		     ignoreincolumnpicker="true"
		     hidden="true"/>
	  </treecols>
	  <template>
	    <rule>
	      <conditions>
                <!-- use of tag="tree" to avoid unnecessary recursion -->
		<content uri="?ref" tag="tree"/>
                ...

Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.