|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : novembre 2002 Messages : 243 ![]() |
Bonjour
Est-ce-que quelqu'un sait comment ajouter dynamiquement des items dans un TreeView. En effet, j'ai généré un menu avec XMLRAD et ça marche. Seulement les Items sont dans le fichier xsl. Est-il possible de les mettre dans un fichier xml (qui peut-être par utilisateur comme un profile) et de les importer. Merci par avance |
|
|
00
|
|
|
#2 | ||||||
|
Membre éclairé
![]() |
Yep, pas de probleme ! c'est ca la joie de XML/XSL
Alors, c'est parti pour une ptite explication du Treeview. Le composant Treeview est assez simple : il se compose d'un fichier .js pour le scripting, d'un fichier xsl avec quelques templates et des ressources graphiques pour les branches de l'arbre. Ce qui nous interesse, c'est le fichier xsl treeview.xsl. A l'interieur, on va trouver une template name="xslc:Treeview" qui accepte un paramètre Tree. Ce paramètre est un node-set, c'est à dire un fragment de document XML qui va être utilisé pour construire l'arbre. C'est à partir du contenu de ce node-set que les différents noeuds vont être créés, par un appel récursif sur la template match="Item". Pour créer dynamiquement des noeuds dans un treeview (on y arrive Imaginons qu'on veut afficher sous forme d'arbre la liste des organisations. On a une extraction qui me crée le XML suivant : Code :
Code :
Code :
Avec ce genre de technique, on commence à avoir un composant réellemetn dirigé par les données : le branches de l'arbre sont créées en fonction du contenu de la base. Si on rajoute une nouvelle organisation dans la base, elle apparaitra automatiquement dans l'arbre. Shazaaam ! Dernier conseil : n'hésite pas à regarder le code des composants fournis avec XMLRAD, à savoir le fichier xslc.xsl, treeview.xsl et les autres. Ca fourmille d'informations et de "best-practices" là-dedans
__________________
Nicolas |
||||||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : novembre 2002 Messages : 243 ![]() |
Merci pour la réponse mais ce n'est pas exactement ce que je recherche. En fait, pour ce que je veux, imagine que tu génère un menu avec XMLRAD. Tu ouvre le menu.xsl, tu prends tous les <Item Caption=.......>, tu les mets dans un fichier xml que tu importe dans menu.xmlgram. La question est la suivante : comment dans le template treeview faire en sorte de parser correctement tous les <Item ....>.
|
|
|
00
|
|
|
#4 | ||
|
Membre éclairé
![]() |
Ca me fait de la peine qu'un post aussi long tombe à coté de la plaque
Pour faire ca, pas de probleme non plus, il te suffit de "copier" les noeuds du document XML vers le node-set. On utilise pour ca <xsl:copy-of> Par exemple : Code :
value-of récupère les noeuds type texte d'un élement et la copie en sortie. copy-of récupère toute la structure (balises, attributs, etc.) d'un élément et la recopie intégralement en sortie. C'est plus simple donc
__________________
Nicolas |
||
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : novembre 2002 Messages : 243 ![]() |
Mais non mais non, ce n'est pas tombé à côté de la plaque. C'était fort intéressant et je pense que ça en intéressera plus d'un.
J'ai bien noté la seconde solution et je l'avais déjà expérimentée. Elle ne fonctionne pas !! En fait le problème se situe au niveau de l'interprétation de {$XMLC_PictosPath} et de Caption="{/document/Locales/MaVariableMultiLingue}". Le TreeView est bien construit mais sans image, titre, et href. Si tu as une idée et une solution c'est cool |
|
|
00
|
|
|
#6 | ||||
|
Membre éclairé
![]() |
héhé
Si il s'agit juste pour toi de déplacer les Items du Treeview dans un autre fichier, sans faire du vrai dynamique comme dans la 1ere solution, tu peux utiliser un fichier XSL au lieu d'un XML pour stocker tes Items. Par exemple : fichier TreeItems.xsl : Code :
Code :
Si cette solution ne te satisfait pas, il te faudra passer par une grammaire intermédiaire, transformée par une template pour créer les bons Items avec les bonnes valeurs dans les attributs. Ca te permettra d'avoir les éléments dans du XML, de les transformer en éléments <Item> avec les bonnes valeurs dans les attributs et de les passer finallement en paramètre au treeview. A vue de nez, mettre tout ca dans un autre xsl semble plus simple
__________________
Nicolas |
||||
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : novembre 2002 Messages : 243 ![]() |
Il est clair que je préfère largement la solution xml à la solution xsl. Concernant la grammaire de transformation, je ne vois pas trop comment dans la mesure où c'est au moment du parsage qu'il y a visiblement un problème. Serait-ce trop tôt ?
Une explication ou un petit exemple serait le bienvenu. Merci |
|
|
00
|
|
|
#8 | ||||||
|
Membre éclairé
![]() |
ok, ok... un ptit exemple, alors
Il faut que tu découples ta grammaire XML décrivant tes éléments du treeview avec une template xsl qui transforme tes éléments en noeud <Item> correcte. Voilà l'exemple : document XML: Code :
Code :
Pourquoi faire tout ce xsl ? Si tu mets un <xsl:value-of> dans le XML, il ne sera pas interpreté, ce qui doit sembler normal... Quand tu écris dans ton xml un attribut ImagePath="{$XMLC_PictosPath}...", c'est exactement comme si tu écrivais un xsl:value-of, c'est strictement pareil. Les {...} ne sont donc pas interprétées. Tu es donc obligé de découpler ta description XML qui ne contient que des données et de transformer cette grammaire vers la bonne grammaire attendue par le Treeview grâce à une template. La grammaire choisie, à base de Nodes, Node peut-être remplacé par n'importe quoi (cf. l'exemple ORGS/ORG du début du post). A toi d'écrire la Template xsl qui permet de transformer ta grammaire vers la grammaire du Treeview. Tu remarques qu'on est obligé de passer par des tests pour pouvoir prendre en compte différents cas : chemin d'accès de l'image, si elle est dans un sous-répertoire du Portail, de la skin ou des pictos; chemin du HRef : si c'est une action, quel est l'alias d'application ? etc... Le dernier point est la récursivité XSL, avec un simple xsl:apply-templates. Le Treeview accepte une hiérarchie d'éléments pour construire son arbre. Pour prendre ca en compte, il suffit de lui fournir des éléments <Item> imbriqués les uns dans les autres. Pour notre transformation, il suffit de dire de répéter la transformation pour tous les sous-éléments Node à l'intérieur d'un Node, ce qui sera récursif et construira la bonne hiérarchie, facilement. Finallement, pour appeller ton treeview : Code :
__________________
Nicolas |
||||||
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : novembre 2002 Messages : 243 ![]() |
C'est de la bombe bb, euh Nicolas. Merci pour la démo, je vais voir ça tranquillement. En tout cas merci pour ta patience
|
|
|
00
|
|
|
#10 | |
|
Membre éprouvé
![]() ![]() |
Citation:
Moi je me fais ma petite compil de best of XMLRAd yo ! Sylvain
__________________
.NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web Mon Blog : http://blog.developpez.com/index.php?blog=89 Mes Articles : http://sjames.developpez.com/ Rubrique XMLRAD: http://xmlrad.developpez.com |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() |
il y a aussi la page de news d'XMLRAD qui contient quelques infos:
http://e-delos.com/DownloadBin/Downl...LUE=xmlrad.com
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com