Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1531 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Créer un lien dans XSL en fonction de données dans XML

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer un lien dans XSL en fonction de données dans XML

n°474321
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 11:37:16  profilanswer
 

Bonjour à tous,
 
Voici mon problème: j'ai un fichier XML qui me sert de menu où je stocke le nom d'une partie, le lien correspondant à cette partie (c'est à dire le fichier à afficher) et un résumé de ce qu'elle contient.
Je voudrais, à l'aide de la feuille XSL dédiée au menu, pouvoir faire afficher le menu tel que l'on puisse voir le nom de la partie et en cliquant l'on puisse accéder à la page. j'ai regardé dans la doc XML in a nutshell... rien...
 
<reference xlink:type="simple" xlink:href='<xsl:value-of select="fichier"/>'><xsl:value-of select="nom"/></reference>
 
Apparemment, il n'accepte pas le fait de mettre <xsl:value-of select="fichier"/> qui est "dynamique" comme référence.
 
Comment dois-je faire? Je souhaite garder l'architecture de mon menu comme cela:
<menu>
<titre>
<nom>...</nom>
<fichier>...</fichier>
</titre>
<titre>
...
</titre>
...
</menu>
 
Merci de vos réponses. :)


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 01-08-2003 à 11:37:16  profilanswer
 

n°474327
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 11:41:28  profilanswer
 

peut tu poster un bout de xml stp.
si je comprend bien "fichier" c l'url du fichier a d/l. dans ce cas ca serai plus @fichier
 
sinon telecharge xmlspy pour ton dev ca va t'aider

n°474333
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 11:48:24  profilanswer
 

En fait, j'ai menu.xml, menu.xsl, fichier1.php, index.php dans un répertoire. Qui va rester ? :lol: , non je plaisante. Mon fichier index utilise menu.xml pour la partie apparente tout le temps dans le site (menu).
 
menu.xml

Code :
  1. <menu>
  2.       <title id="1" lang='fr'>
  3.                <label1>
  4.                       Forums
  5.                </label1>
  6.                <page1>
  7.                      forums.php
  8.                </page1>
  9.                <title2 id="1">
  10.                        <label2>
  11.                               Formateurs
  12.                        </label2>
  13.                        <page2>
  14.                              forum_formateur.php
  15.                        </page2>
  16.                </title2>
  17.                <title2 id="2">
  18.                        <label2>
  19.                               Logiciel
  20.                        </label2>
  21.                        <page2>
  22.                              forum_logiciel.php
  23.                        </page2>
  24.                </title2>
  25.       </title>
  26. ....
  27. </menu>


 
menu.xsl

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3.   <xsl:template match="/">
  4.     <html>
  5.       <body style="font-family:Arial; font-size:12pt;">
  6.         <table>
  7.           <xsl:for-each select="menu/title" order-by="+label1">
  8.             <tr><td><reference xlink:type="simple" xlink:href='<xsl:value-of select="page1"/>'><xsl:value-of select="label1"/></reference></td></tr>
  9.           </xsl:for-each>
  10.         </table>
  11.       </body>
  12.     </html>
  13.   </xsl:template>
  14. </xsl:stylesheet>


 
Voilà, j'espère que tu as compris ce que je veut faire
 
PS: merci pour le bon de code ;)


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°474347
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 12:03:20  profilanswer
 

bon alors je comprend pas trop ton code, mais c pas grave, je pense avoir un equivalent:
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3. <xsl:template match="/">
  4.  <html>
  5.   <body style="font-family:Arial; font-size:12pt;">
  6.    <table>
  7.     <xsl:for-each select="menu/title" order-by="+label1">
  8.      <tr>
  9.       <td>
  10.        <a type="simple">
  11.         <xsl:attribute name="href"><xsl:value-of select="page1"/></xsl:attribute>
  12.        </a>
  13.       </td>
  14.      </tr>
  15.     </xsl:for-each>
  16.    </table>
  17.   </body>
  18.  </html>
  19. </xsl:template>
  20. </xsl:stylesheet>


 
bon j'espere que ca peut t'aider. en fait mon probleme c ke je connais pas la balise "reference"
 
bonne chance et dis moi si ca marche

n°474353
hop le fou
Tu m'en diras tant
Posté le 01-08-2003 à 12:05:06  profilanswer
 

Manu la science a écrit :

En fait, j'ai menu.xml, menu.xsl, fichier1.php, index.php dans un ...


 
c interdit de mettre la balise xsl:value-of dans une autre balise
je pense que tu dois utiliser attribute si je ne me trompe pas...
 
PS : au fait g rien compri a ce que tu ve faire  :D  
mais il fo juste dégager la balise ...
 
http://selfhtml.selfhtml.com.fr/xm [...] #attribute
 
Edit : grillé...  :sweat:


Message édité par hop le fou le 01-08-2003 à 12:06:02
n°474403
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 13:07:21  profilanswer
 

En fait, je vois bien que c'est interdit de mettre xsl:value-of-select dans une autre balise: c'est qu'est le problème.
Pour t'expliquer mieux mon problème, je veux faire mon menu en liens hypertextes et je veux que XSL fasse la transformation du fichier XML (où se trouve toutes les données nécessaires à la construction de la balise html de lien hypertexte).
 
Prenons un exemple:
nom du lien ("forums" dans la balise <label1> ) et page à afficher ("forums.php" dans la balise <page1> )dans le fichier menu.xml
je veux afficher : forums qui pointe sur le fichier "forums.php".
 
Voilà, j'espère que c'est plus clair... :(


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°474411
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 13:17:36  profilanswer
 

je pense kil faut que tu revois ton xml alors:
 
genre comme ca:

Code :
  1. <menu>
  2. <page page="forum_formateur.php" label="Forum Formateur">
  3. <page page="forum_logiciels.php" label="Forum Logiciel">
  4. </menu>


 
ensuite ton xsl aurais cette tete la:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3. <xsl:template match="/">
  4.    <xsl:apply-templates match="menu"/>
  5. </xsl:template>
  6. <xsl:template match="menu">
  7. <html>
  8.   <body style="font-family:Arial; font-size:12pt;">
  9.    <table>
  10.     <xsl:for-each select="page" order-by="+label">
  11.      <tr>
  12.       <td>
  13.        <a type="simple">
  14.         <xsl:attribute name="href"><xsl:value-of select="@page"/></xsl:attribute>
  15.         <xsl:value-of select="@label" />
  16.        </a>
  17.       </td>
  18.      </tr>
  19.     </xsl:for-each>
  20.    </table>
  21.   </body>
  22. </html>
  23. </xsl:template>
  24. </xsl:stylesheet>


 
je pense ke ca ca marche

n°474417
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 13:31:01  profilanswer
 

Merci pour la réponse, j'étais en train de regarder la doc que tu m'a indiquée, elle est vraiment très bien. Je l'avais déjà vue mais il y en a tellement sur le net qu'un pauvre débutant comme moi s'y perd facilement.
Avec un menu comme celui là, est-ce que la construction d'une interface pour changer le fichier menu.xml sera aussi évidente à faire qu'avec ce que j'ai mis dans les messages précédents ?
 
Le code fait tout à fait ce que je voulais, encore merci... :jap: (mais il faut fermer la balise page par "/" avant le ">"  ;) )


Message édité par Manu la Science le 01-08-2003 à 13:35:02

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°474424
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 13:43:10  profilanswer
 

si je comprend bien tu a un prog (ou autre) qui te creer ton xml comme tu veux. si tu as reussi a le faire avant, ca devrait pas trop de poser de pb.
 
bonne chance et si t'as un pb hesite pas

n°474436
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 13:54:09  profilanswer
 

Non, je n'ai pas (encore) de prog pour créer du XML, mais j'ai vu quelques trucs sur le Net...
Par contre, avec ce que tu m'as gentillement proposé, je ne peux pas gérer les langues sans répéter le nom du fichier à activer:

Code :
  1. <menu>
  2. <page lang="fr" page="forum_formateur.php" label="Forum Formateur">
  3. <page lang="fr" page="forum_logiciels.php" label="Forum Logiciel">
  4. </menu>


Si je veux gérer les langues, il faut que je fasse:

Code :
  1. <menu>
  2. <page lang="fr" page="forum_formateur.php" label="Forum Formateur">
  3. <page lang="en" page="forum_formateur.php" label="Teacher's forum">
  4. <page lang="en" page="forum_logiciels.php" label="Software's forum">
  5. <page lang="fr" page="forum_logiciels.php" label="Forum Logiciel">
  6. </menu>


 
Je pense que tu vois le problème pour saisir les données. Il y a redondance d'infos (page="forum_formateur.php" ) car je pointe sur le même fichier.
 
Je suis en train de voir si on peut améliorer cela...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 01-08-2003 à 13:54:09  profilanswer
 

n°474448
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 14:07:04  profilanswer
 

tu peux faire ca:

Code :
  1. <menu>
  2. <lang language="fr">
  3.    <page page="forum_formateur.php" label="Forum Formateur" />
  4.    <page page="forum_logiciels.php" label="Forum Logiciel" />
  5. </lang>
  6. <lang language="en">
  7.    <page page="forum_formateur.php" label="Teacher's forum">
  8.    <page page="forum_logiciels.php" label="Software's forum">
  9. </lang>
  10. </menu>


 
voila essaye de faire le xsl ki correspond, si t'y arrive pas je t'aiderai
 
bonne chance
 
edit: arf j'avais pas bien lut ton message... je pense pas ke tu puisse eviter un certaine redondance. apres il faut ke tu t'arrange pour en avoir le moins possible...


Message édité par da_s_monk le 01-08-2003 à 14:12:39
n°474484
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 14:27:33  profilanswer
 

Pas tout à fait:

Code :
  1. <menu>
  2.   <title>   (1ère rubrique de mon menu)
  3.     <page page="forums.php"> 
  4.       <lang language="fr" label="Forums"/>
  5.       <lang language="en" label="Forums"/>   (en anglais, cela ne change pas grand-chose, mais en allemand...)
  6.     </page>
  7.     <title2>   (1ère sous-rubrique de ma (1ère) rubrique)
  8.       <page2 page="forum_formateur.php"> 
  9.         <lang language="fr" label="Forum Formateur"/>
  10.         <lang language="en" label="Teacher's forum"/>
  11.       </page2>
  12.     </title2>
  13.     <title2>   (2nde sous-rubrique de ma (1ère) rubrique) 
  14.       <page2 page="forum_logiciel.php"> 
  15.         <lang language="fr" label="Forum Logiciel"/>
  16.         <lang language="en" label="Software's forum"/>
  17.       </page2>
  18.     </title2>
  19.   </title>
  20.   <title>   (2nde rubrique de mon menu)
  21.     <page page="logiciel.php"> 
  22.       <lang language="fr" label="Logiciel"/>
  23.       <lang language="en" label="Software"/>
  24.     </page>
  25.     <title2>   (1ère sous-rubrique de ma (2nde) rubrique)
  26.       <page2 page="presentation.php"> 
  27.         <lang language="fr" label="Présentation"/>
  28.         <lang language="en" label="Presentation"/>   (là aussi, cela ne change pas grand-chose, mais en allemand... ;) )
  29.       </page2>
  30.     </title2>
  31.     <title2>   (2nde sous-rubrique de ma (2nde) rubrique)
  32.       <page2 ......> 
  33.           .......
  34.       </page2>
  35.     </title2>
  36.   </title>
  37.   ....
  38. </menu>


 
j'espère que tu vois maintenant où je veux en venir...
 
et je vais essayer de faire afficher mon menu comme cela:
en français:
Forums
  Forum Logiciel
  Forum Formateur
Logiciel
  Présentation
    ...
    ...
      ... (pourquoi pas...)
  ...
...
 
en anglais:
Forums
  Software's forum
  Teacher's forum
Software
  Presentation
    ...
    ...
      ... (Why not...)
  ...
...
 
je recommence en allemand ou tout le monde à compris... ;)


Message édité par Manu la Science le 01-08-2003 à 14:34:39

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°474491
hop le fou
Tu m'en diras tant
Posté le 01-08-2003 à 14:33:04  profilanswer
 

<Mode Vendredi>
on peut l avoir en allemand?  :D  
...  :pfff:  :lol:  :D  
</Mode Vendredi>

n°474501
Manu la Sc​ience
...la science ... pas toujours
Posté le 01-08-2003 à 14:40:33  profilanswer
 

Im Deutsch (...en allemand):
Foren  
 Forum für der Software  
 Forum für  die Ausbilder
Software  
 Vorstellung
 
En Japonais maintenant... :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°474507
da_s_monk
Awwwww! Good Job!
Posté le 01-08-2003 à 14:44:54  profilanswer
 

effectivement c pas la fete... la je vois pas trop comment simplifier ton truc. prend xml spy, utilise l'interface graphique pour faire ton xml, et vois comment il te l'organise... la comme ca je vois pas trop... mais de toute facon, quoi kil arrive tu aura une redondance a un moment ou un autre..
 
voila dsl de ne pouvoir t'aider plus
 
bonne chance qd meme

n°478368
Manu la Sc​ience
...la science ... pas toujours
Posté le 05-08-2003 à 16:42:17  profilanswer
 

Salut à tous,
 
J'espère que vous n'avez pas trop chaud... Pour ma part, j'ai super chaud (à Dijon où il doit faire un bon 38°C et 32°C dans le bureau  :sweat: ).
J'ai également attrapé chaud à griller mes neurones sur mon problème...
Voici où j'en suis:
mon fichier super_menu.xml:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="super_menu.xsl" ?>
  3. <menu>
  4.   <title>
  5.     <file>forums.php</file>
  6.     <label lang="fr">Forumfr (T)</label>
  7.     <label lang="en">Forums (T)</label>
  8.     <title2>
  9.       <file>forum_logiciel.php</file>
  10.       <label lang="fr">Forum du logiciel (T2)</label>
  11.       <label lang="en">Software's forum (T2)</label>
  12.       <title3>
  13. <file>forum_log_deb.php</file>
  14. <label lang="fr">Pour les débutants (T3)</label>
  15.       </title3>
  16.       <title3>
  17. <file>forum_log_avanc</file>
  18. <label lang="fr">Pour les avancés (T3)</label>
  19.       </title3>
  20.     </title2>
  21.     <title2>
  22.       <file>forum_formateur.php</file>
  23.       <label lang="fr">Forum des formateurs (T2)</label>
  24.       <label lang="en">Forum of Teachers (T2)</label>
  25.       <title3>
  26.         <file></file>
  27. <label lang=""></label>
  28.       </title3>
  29.       <title3>
  30. <file></file>
  31. <label lang=""></label>
  32.       </title3>
  33.     </title2>
  34.   </title>
  35.   <title>
  36.     <file>logiciel.php</file>
  37.     <label lang="fr">Logiciel (T)</label>
  38.     <label lang="en">Software (T)</label>
  39.   </title>
  40. </menu>


Mon fichier super_menu.xsl:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  3. <xsl:template match="/">
  4.   <html>
  5.     <head>
  6.     </head>
  7.       <body>
  8.  <table border="1">
  9.   <tr>
  10.        <td><b>MENU</b></td>
  11.   </tr>
  12.    <xsl:for-each select="menu/title">
  13.      <tr>
  14.        <td>
  15.  <a type="simple">
  16.    <xsl:attribute name="href">
  17.       <xsl:value-of select="file" />
  18.    </xsl:attribute>
  19.    <xsl:apply-templates select="label" />
  20.  </a>
  21.       </td>
  22.     </tr>
  23.    </xsl:for-each>
  24.    <xsl:for-each select="menu/title/title2">
  25.      <tr>
  26.        <td>
  27.  <a type="simple">
  28.    <xsl:attribute name="href">
  29.       <xsl:value-of select="file" />
  30.    </xsl:attribute>
  31.    <xsl:apply-templates select="label" />
  32.  </a>
  33.       </td>
  34.     </tr>
  35.   </xsl:for-each>
  36.   <xsl:for-each select="menu/title/title2/title3">
  37.      <tr>
  38.        <td>
  39.  <a type="simple">
  40.    <xsl:attribute name="href">
  41.       <xsl:value-of select="file" />
  42.    </xsl:attribute>
  43.    <xsl:apply-templates select="label" />
  44.  </a>
  45.       </td>
  46.     </tr>
  47.   </xsl:for-each>
  48. </table>
  49.       </body>
  50.     </html>
  51.   </xsl:template>
  52.   <xsl:template match="label">
  53.     <xsl:if test="@lang = 'fr'">
  54.       <xsl:apply-templates />
  55.     </xsl:if>
  56.   </xsl:template>
  57. </xsl:stylesheet>


Et voila ce que me donne les deux fichiers:

Code :
  1. MENU
  2. Forumfr (T)
  3. Logiciel (T)
  4. Forum du logiciel (T2)
  5. Forum des formateurs (T2)
  6. Pour les débutants (T3)
  7. Pour les avancés (T3)


 
Or, mon menu devrait être comme ceci:

Code :
  1. MENU
  2. Forumfr (T)
  3.    Forum du logiciel (T2)
  4.       Pour les débutants (T3)
  5.       Pour les avancés (T3)
  6.    Forum des formateurs (T2)
  7. Logiciel (T)


   Le problème est que je ne sais pas comment faire car on ne peut pas imbriquer des for-each les uns dans les autres... ou je m'y prends mal...
Voilà pour mon premier problème.
   Le second (on verra quand on n'y sera) est de pouvoir faire apparaître "Forum du logiciel" et "Forum des formateurs" en cliquant pour la première fois sur "Forumfr". Mais là, j'en demande peut-être un peu trop...
   Je suppose qu'il y a du javascript imbriqué dans la feuille xsl...
 
Merci de votre aide :jap:


Message édité par Manu la Science le 05-08-2003 à 16:42:45

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°478723
da_s_monk
Awwwww! Good Job!
Posté le 06-08-2003 à 08:06:54  profilanswer
 

Hello, ca faisait longtemps!
 
A paris c la mort... hier le termometre en milieu d'aprem annoncé un 40.6... enfin vive la clim  :D  
 
bon sinon il est possible d'imbriqué des for-each (tu es d'ailleusrs obligé).  
 
pour ta deuxieme question bah oui javascript. mais bon apres, en fonction de la beauté du truc final c plus ou moins dur (tu pourrais par exemple afficher des div caché en clicquant ou se genre de choses rigolotes  ;) )
 
voila si t'as du mal pour les double for-each, je t'aiderais, mais je repete un conseil d'avant: utilise xml-spy ( a moins ke ce soit pour une entreprise ki veut pas payer la liscence) avec c le bonheur pour verifer ta syntaxe en live.
 
aller bonne chance. moi je vais tenter d'arriver en état au boulot ( JE veux pas aller dans le metro  :cry: )

n°478909
Manu la Sc​ience
...la science ... pas toujours
Posté le 06-08-2003 à 11:35:29  profilanswer
 

Salut à tous, (apparemment, il y a des parisiens qui se connectent tôt sur internet...)
J'ai bien XMLSPY (version perso...) que j'utilise depuis que tu me l'a conseillé.
Je suis arrivé à imbriquer des for-each comme le montre le script:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  3. <xsl:template match="/">
  4. <html>
  5.  <head>
  6.  </head>
  7.  <body>
  8.   <table border="1">
  9.   <!-- <tr>
  10.       <td><b>MENU</b></td>
  11.    </tr>-->
  12.     <xsl:for-each select="menu/title">
  13.      <tr bgcolor="yellow">
  14.       <td>
  15.        <a type="simple">
  16.         <xsl:attribute name="href">
  17.          <xsl:value-of select="file" />
  18.         </xsl:attribute>
  19.        <xsl:apply-templates select="label" />
  20.       </a>
  21.      </td>
  22.     </tr>
  23.      <tr bgcolor="green">
  24.     <xsl:for-each select="menu/title/title2">
  25.       <td>
  26.        <a type="simple">
  27.         <xsl:attribute name="href">
  28.          <xsl:value-of select="file" />
  29.         </xsl:attribute>
  30.        <xsl:apply-templates select="label" />
  31.       </a>
  32.      </td>
  33.      <tr>
  34.    <xsl:for-each select="menu/title/title2/title3">
  35.       <td>
  36.        <a type="simple">
  37.         <xsl:attribute name="href">
  38.          <xsl:value-of select="file" />
  39.         </xsl:attribute>
  40.        <xsl:apply-templates select="label" />
  41.       </a>
  42.      </td>
  43.    </xsl:for-each>
  44.     </tr>
  45.    </xsl:for-each>
  46.     </tr>
  47.    </xsl:for-each>
  48.   </table>
  49.  </body>
  50. </html>
  51. </xsl:template>
  52. <xsl:template match="label">
  53.   <xsl:if test="@lang = 'fr'">
  54.     <xsl:apply-templates />
  55.   </xsl:if>
  56. </xsl:template>
  57. </xsl:stylesheet>


Mais le <xsl:template match="label"> ne marche plus (je ne sais pas pourquoi...). Il devrait pouvoir marcher, mais je suppose que le problème est dans la déclaration des for-each select="menu/title" puis "menu/title/title2" etc.
 
et voici ce donne le résultat:
Forumfr (T)
Logiciel (T)
 
PS: j'ai trouvé une salle enterrée type buncker dans ma boîte qui est climatisée... Que du bonheur  :D


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°478924
Manu la Sc​ience
...la science ... pas toujours
Posté le 06-08-2003 à 11:47:51  profilanswer
 

C'est bon, j'ai trouvé... Mon menu s'affiche correctement...
 
J'ai encore une autre question (on va me dire que je suis ch..nt :fou: ):
Je voudrais gérer les langues et pour l'instant je ne le gère qu'avec

Code :
  1. <xsl:if test="@lang = 'fr'">
  2.    <xsl:apply-templates />
  3. </xsl:if>


je pense qu'il faut que je déclare un paramètre qui prendra la place de 'fr'. Comment pourrais-je récupérer ce paramètre via une page php ? et est-ce la bonne méthode ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°478959
da_s_monk
Awwwww! Good Job!
Posté le 06-08-2003 à 12:08:28  profilanswer
 

bonne idée le bunker! moi y'a la salle machine (20 degrés rock stable)
 
bon sinon pour tes langues: tu veux faire koi exactement? recupérer dans ta page si le gars a les settings francais ou anglais, et ensuite dans ton xsl aplliquer les bons textes?

n°479035
Manu la Sc​ience
...la science ... pas toujours
Posté le 06-08-2003 à 14:09:52  profilanswer
 

En fait, je vais laisser choisir la langue par l'internaute (avec de petits drapeaux...) et le garder comme variable de session php (je pense que c'est le plus simple...) et je voudrais transmettre cette variable au fichier xsl. Comment faire?
J'ai regardé la doc sur param et with-param à selfhtml.com mais je ne comprends pas trop.
 
Est-ce un truc du genre:

Code :
  1. <xsl:template match="label">
  2.    <xsl:call-template name="boucle">
  3.      <xsl:with-param name="lang" select="@lang" />
  4.   </xsl:call-template>
  5. </xsl:template>


avec <xsl: param name="lang" /> dans le template <xsl:template match="/"> ?


Message édité par Manu la Science le 06-08-2003 à 14:10:20

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°479049
da_s_monk
Awwwww! Good Job!
Posté le 06-08-2003 à 14:35:53  profilanswer
 

ca je connais pas trop en fait. je sais qu'en javascript, tu peux selectionner un attribut et changer sa valeur (un collegue a fait ca pour des tri). si je retrouve l'exmple je t'envoies ca. par contre a mon toi ca t'interresse plus de le faire coté serveur, mais g aucune idée en php comment ca se fait. si je trouve je te file tt ca. par contre si tu trouve post le.
 
Voila sinon t''as réussi a t'en sortir avec la class java ke je t filer sur ton autre post?

n°479060
Manu la Sc​ience
...la science ... pas toujours
Posté le 06-08-2003 à 14:47:31  profilanswer
 

Pour la class java, je l'ai mis de côté et je le ferai un peu plus tard (encore merci). Le problème du menu devenait plus urgent...
 
Mais bon, dès que mon menu est fait et a de "la gueule", je le poste, tout comme le reste (transformation de ton code pour le php).
 
 :jap: Le savoir est fait pour être diffusé. :jap:  
 
Je vais également chercher pour le passage de paramètre par javascript. Il me semblait pourtant l'avoir vu sur ce site...
Je replonge dans la doc...
 
Plouff...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°479152
Manu la Sc​ience
...la science ... pas toujours
Posté le 06-08-2003 à 16:30:26  profilanswer
 

J'avance avec beaucoup de mal. J'ai trouvé une fonction lang() pour le xml. J'ai du formater mon xml en rajoutant au début du fichier:

Code :
  1. <!DOCTYPE menu [
  2.   <!ELEMENT menu (title*)>
  3.   <!ELEMENT title (file, label*, title2*)>
  4.   <!ELEMENT file (#PCDATA)>
  5.   <!ELEMENT label (#PCDATA)>
  6.   <!ELEMENT title2 (file, label*, title3*)>
  7.   <!ELEMENT title3 (file, label*)>
  8.   <!ATTLIST label  xml:lang NMTOKEN #IMPLIED>
  9. ]>


et changer mes "lang" par des "xml:lang" des balises label.
avec ceci, je rajoute à mon fichier xsl à la place du template label le code suivant:

Code :
  1. <xsl:template match="label">
  2. <xsl:choose>
  3.   <xsl:when test="lang('fr')">
  4.    <xsl:value-of select="." />
  5.   </xsl:when>
  6.   <xsl:otherwise>
  7.    <xsl:value-of select="." />
  8.   </xsl:otherwise>
  9. </xsl:choose>
  10. </xsl:template>


 
Mais à l'affichage, je vois qu'il me donne mon menu avec les titres dans toutes les langues (du style: Forum du logiciel(T2)Software's forum(T2)).
Je pense que l'erreur vient de otherwise, mais j'ai cherché à mettre autre chose, sans succès.
 
J'ai les neurones qui frisent et qui commencent à griller...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°483195
Manu la Sc​ience
...la science ... pas toujours
Posté le 11-08-2003 à 11:24:39  profilanswer
 

voici où j'en suis...
mon menu en XML:

Code :
  1. <menu>
  2. <title>
  3.  <file file="forums.php"/>
  4.  <label lang="fr" label="Forums"/>
  5.  <label lang="en" label="Forums"/>
  6.  <title2>
  7.   <file file="forum_logiciel.php"/>
  8.   <label lang="fr" label="Forum du logiciel"/>
  9.   <label lang="en" label="Software's forum"/>
  10.   <title3>
  11.    <file/>
  12.    <label lang="fr" label="Label 3 en 1"/>
  13.    <label lang="en" label="Label three in one"/>
  14.   </title3>
  15.   <title3>
  16.    <file/>
  17.    <label lang="fr" label="Label 3 en 2"/>
  18.    <label lang="en" label="Label three in one"/>
  19.   </title3>
  20.  </title2>
  21.  <title2>
  22.   <file file="forum_teacher.php"/>
  23.   <label lang="fr" label="Forum des formateurs"/>
  24.   <label lang="en" label="Forum of Teachers"/>
  25.   <title3>
  26.    <file/>
  27.    <label lang="" label=""/>
  28.   </title3>
  29.   <title3>
  30.    <file/>
  31.    <label lang="" label=""/>
  32.   </title3>
  33.   <title3>
  34.    <file/>
  35.    <label lang="" label=""/>
  36.   </title3>
  37.  </title2>
  38.  <title2>
  39.   <file/>
  40.   <label lang="" label=""/>
  41.   <title3>
  42.    <file/>
  43.    <label lang="" label3=""/>
  44.   </title3>
  45.   <title3>
  46.    <file/>
  47.    <label lang="" label=""/>
  48.   </title3>
  49.  </title2>
  50. </title>
  51. <title>
  52.  <file file="logiciel.php"/>
  53.  <label lang="fr" label="Logiciel"/>
  54.  <label lang="en" label="Software"/>
  55. <title>
  56. <menu>


avec mon fichier XSL:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  3. <xsl:output method="html"/>
  4. <xsl:param name='lang_choice'>fr</xsl:param>
  5. <xsl:template match="/">
  6. <html>
  7.  <head>
  8.  </head>
  9.  <body>
  10.   <table>
  11.     <xsl:for-each select="//title">
  12.      <tr bgcolor="#CCCC00">
  13.       <td>>
  14.       <xsl:call-template name="langue"/>
  15.      </td>
  16.     </tr>
  17.     <xsl:for-each select="title2">
  18.      <tr bgcolor="#99CC00">
  19.       <td>>>
  20.        <xsl:call-template name="langue"/>
  21.       </td>
  22.      </tr>
  23.      <xsl:for-each select="title3">
  24.       <tr bgcolor="#CCFF00">
  25.        <td>>>>
  26.         <xsl:call-template name="langue"/>
  27.        </td>
  28.       </tr>
  29.     </xsl:for-each>
  30.    </xsl:for-each>
  31.    </xsl:for-each>
  32.   </table>
  33.  </body>
  34. </html>
  35. </xsl:template>
  36. <xsl:template name="langue">
  37. <a type="simple">
  38.  <xsl:attribute name="href">
  39.   <xsl:value-of select="file/@file" />
  40.  </xsl:attribute>
  41.  <xsl:for-each select="label">
  42.   <xsl:if test="@lang = $lang_choice">
  43.    <xsl:value-of select="@label"/>
  44.   </xsl:if>
  45.  </xsl:for-each>
  46. </a>
  47. </xsl:template>
  48. </xsl:stylesheet>


ceci me permet d'avoir un menu dans la langue choisie. Mais j'ai essayé de développer une version XSL qui me permettrait d'afficher une langue par défaut (anglais par exemple) quand le titre ne possède pas de traduction pour la langue souhaitée.
Comment faire ?
 
 :jap: Merci de votre aide :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°483964
MagicBuzz
Posté le 11-08-2003 à 19:35:12  profilanswer
 

J'ai pas tout lu, je me suis arrêté au moment du <xsl:value-of> interdit dans une balise.
 
Soit on crée un attribut avec <xsl:attribut>, soit, plus simple, on utilise au choix :
 
{tagPath} => Valeur à l'intérieur de la node XML
@attributePath => Valeur de l'attribut
 
Exemple :
 
XML :
 
<article>
    <title color="red">toto</title>
</article>
 
 
Dans le XSL :
 
<h1 color="@/article/title/color">...</h1>
 
Ou :
 
XML :
 
<article>
    <title>toto
        <color>red</color>
    </title>
</article>
 
XSL :
 
<h1 color="{/article/title/color}">...</h1>

n°484584
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-08-2003 à 10:16:26  profilanswer
 

Je ne comprends pas trop ton message MagicBuzz (je suis désolé). Peut-être est-ce un message pour les questions précédentes ?  :??:  
Mon menu me permet pour l'instant d'afficher l'arborescence du fichier xml, c'est à dire tous les titres(1) dans l'ordre d'apparition du fichier xml, après chaque titre(1), il y a les titres(2) qui composent les titres(1) puis les titres(3). Tous ces titres apparaissent sous la forme d'un texte (label) rattaché au titre en question et d'un lien (page php) également rattachée au titre. Et tout ceci dans une langue choisie par l'internaute.
   Mais, mon problème est que si l'internaute choisit l'allemand (par exemple), je peux n'avoir qu'une partie de mon menu traduis en allemand et je voudrais faire apparaître les titres de mon menu en allemand quand il peut, sinon en anglais.
Je voudrais avoir la possibilité de gérer une langue par défaut quand la langue choisie n'est pas disponible.
 
J'espère avoir été un peu plus clair.  :jap:  merci quand même pour la réponse


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°484595
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-08-2003 à 10:22:45  profilanswer
 

En fait, je viens de comprendre ta réponse, j'ai fait autrement:

Code :
  1. <a type="simple">
  2.  <xsl:attribute name="href">
  3.   <xsl:value-of select="file/@file" />
  4.  </xsl:attribute>
  5.  <xsl:for-each select="label">
  6.   <xsl:if test="@lang = $lang_choice">
  7.    <xsl:value-of select="@label"/>
  8.   </xsl:if>
  9.  </xsl:for-each>
  10. </a>


 
Je gère ainsi mes liens de titre. Je définis une balise de lien (<a> ) à laquelle je lui donne un attribut href (fichier lien) et je met dans le node le texte à afficher, en l'occurence le label choisi en fonction de la langue (mon nouveau problème...)


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°484600
MagicBuzz
Posté le 12-08-2003 à 10:25:45  profilanswer
 

Manu la science a écrit :

Je ne comprends pas trop ton message MagicBuzz (je suis désolé). Peut-être est-ce un message pour les questions précédentes ?  :??:


Oui, je le suis arrêté au début du message, quand tout se monde s'est mis à te conseiller d'utiliser des attributs, là ou des nodes sont plus claires je trouve. Pour moi, un attribut ça contient des nom, des codes, et des chiffres, pas de texte par exemple.
Donc j'ai posté pour indiquer la syntaxe équivalente au @ mais pour les nodes.

n°484647
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-08-2003 à 10:56:45  profilanswer
 

j'ai un autre format de fichier xml où les données sont stockées dans les nodes:

Code :
  1. <menu>
  2. <title>
  3.  <file>forums.php</file>
  4.  <label lang="fr">Forumfr (T)</label>
  5.  <label lang="en">Forums (T)</label>
  6.  <title2>
  7.   <file>forum_logiciel.php</file>
  8.   <label lang="fr">Forum du logiciel (T2)</label>
  9.   <label lang="en">Software's forum (T2)</label>
  10.   <title3>
  11.    <file>forum_log_deb.php</file>
  12.    <label lang="fr">Pour les débutants (T3)</label>
  13.   </title3>
  14.   <title3>
  15.    <file>forum_log_avanc</file>
  16.    <label lang="fr">Pour les avancés (T3)</label>
  17.   </title3>
  18.  </title2>
  19. </title>
  20. </menu>


 J'ai fait la transformation que tu m'a donné pour utiliser un fichier xml mieux formé.
 
J'ai donc le fichier xsl:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  3. <xsl:output method="html"/>
  4. <xsl:param name='lang_choice'>fr</xsl:param>
  5. <xsl:template match="/">
  6. <html>
  7.  <head>
  8.  </head>
  9.  <body>
  10.   <table>
  11.     <xsl:for-each select="//title">
  12.      <tr bgcolor="#CCCC00">
  13.       <td>>
  14.       <xsl:call-template name="langue"/>
  15.      </td>
  16.     </tr>
  17.     <xsl:for-each select="title2">
  18.      <tr bgcolor="#99CC00">
  19.       <td>>>
  20.        <xsl:call-template name="langue"/>
  21.       </td>
  22.      </tr>
  23.      <xsl:for-each select="title3">
  24.       <tr bgcolor="#CCFF00">
  25.        <td>>>>
  26.         <xsl:call-template name="langue"/>
  27.        </td>
  28.       </tr>
  29.     </xsl:for-each>
  30.    </xsl:for-each>
  31.    </xsl:for-each>
  32.   </table>
  33.  </body>
  34. </html>
  35. </xsl:template>
  36. <xsl:template name="langue">
  37. <a href="{/title/file}">
  38.  <xsl:for-each select="label">
  39.   <xsl:if test="@lang = $lang_choice">
  40.    <xsl:value-of select="label"/>
  41.   </xsl:if>
  42.  </xsl:for-each>
  43. </a>
  44. </xsl:template>
  45. </xsl:stylesheet>


 
Mais là, bug, ça ne marche pas... Il ne m'affiche pas les titres. Je pense que j'ai un problème pour gérer les langues (dans le for-each). Comment puis-je faire en gardant faisant une règle d'affichage de la balise label qui sera valable pour tous les titres1, 2 et 3 ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°484741
avander
Posté le 12-08-2003 à 12:20:46  profilanswer
 

N'oublie pas que le for-each change le contexte actuel, donc tu est déjà dans l'élément label et le parseur ne trouveras plus de label enfant...  

Code :
  1. <xsl:template name="langue">
  2. <a href="{/title/file}">
  3. <xsl:for-each select="label">
  4.   <xsl:if test="@lang = $lang_choice">
  5.    <xsl:value-of select="."/>               <!-- Avander -->
  6.   </xsl:if>
  7. </xsl:for-each>
  8. </a>
  9. </xsl:template>


 
A+


---------------
A thing of beauty is a joy forever (John Keats)
n°484834
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-08-2003 à 13:56:40  profilanswer
 

Merci Avander, ça marche.
 
J'essaie d'instaurer une langue par défaut dans mon menu mais j'ai beaucoup de mal. En fait, je voudrais faire cela à la place du for-each ci dessus:
Choix parmi les différentes balises <label>
    Si la langue choisie par l'internaute est présente (parmi tous ces <label lang=""> )
        J'affiche la langue choisie
    Sinon j'affiche la langue par défaut
 
Je sais qu'il faut utiliser xsl : choose et xsl : otherwise (pour sinon)
     

Code :
  1. <xsl:choose>
  2.   <xsl:when test="@/title/file/label/ = $lang_choice">
  3.    <xsl:apply-templates select="."/>
  4.   </xsl:when>
  5.   <xsl:otherwise>
  6.   (Comment faire?)
  7.   </xsl:otherwise>
  8.  </xsl:choose>


Je ne sais pas comment afficher la langue par défaut (en). Je pense que le xsl:when tout seul ne suffira pas et je présens qu'il faudra un for-each dedans. Je suis si près du but, ce serait dommage de renoncer... Sauriez-vous comment faire?


Message édité par Manu la Science le 12-08-2003 à 14:12:19

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°484915
avander
Posté le 12-08-2003 à 14:43:25  profilanswer
 

Ceci pourrait faire l'affaire pour l'instant:


  <xsl:template name="langue">
   <a href="{./file}">
     <xsl:choose>
       <xsl:when test="label[@lang = 'fr']">
         <xsl:apply-templates select="label[@lang = 'fr']"/>
       </xsl:when>
       <xsl:otherwise>
         <xsl:apply-templates select="label[@lang = 'en']"/>
       </xsl:otherwise>
     </xsl:choose>
   </a>
  </xsl:template>


 
A suivre...


---------------
A thing of beauty is a joy forever (John Keats)
n°484979
Manu la Sc​ience
...la science ... pas toujours
Posté le 12-08-2003 à 15:20:53  profilanswer
 

MERCI, Merci, merci et encore merci.... :jap:  
 
Ca marche, c'est que du bonheur... :love:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°485947
Manu la Sc​ience
...la science ... pas toujours
Posté le 13-08-2003 à 13:59:24  profilanswer
 

Salut à tous, je reviens à la charge...
 
Je suis en train de transformer mon menu pour qu'il soit un peu plus vivant, c'est à dire avec des rollovers (de menu quoi...). en fait, je vais utiliser une feuille de style en .css qui est attachée à ma feuille html. Mais dans mon script xml parsé avec le xsl je dois obtenir une balise <a></a> du genre <a href="je l'ai déjà" class="title"></a> si le texte à afficher correspond au title de mon menu.
Je reprends un bout de mon menu:
<menu>
<title>
   <file/>
   <label/>
   <title2>
      <file/>
      <label/>
   </title2>
</title>
<title>
...
</title>
</menu>
Quand j'affiche la balise <a> correspondant au title avec le texte du premier <label> (en bleu) et l'ancrage au fichier du premier <file> (en bleu) grâce au href="{./file}", je voudrais faire afficher dans la balise <a> comme attribut class le noeud dans lequel on se trouve, c'est à dire "title" en vert. J'aimerai pouvoir faire la même chose que pour file (est-ce que "{.}" suffirait? ).
 
Merci :jap:


Message édité par Manu la Science le 13-08-2003 à 13:59:54

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°485960
avander
Posté le 13-08-2003 à 14:13:12  profilanswer
 

Ben non pcq {.} va te renvoyer le contenu de l'élément courant, heureusement il y a une fonction qui sert à retrouver le nom de l'élément courant pour te sauver!
 


  <xsl:template name="langue">
   <a href="{./file}" class="{name()}">
     <xsl:choose>
       <xsl:when test="label[@lang = 'fr']">
         <xsl:apply-templates select="label[@lang = 'fr']"/>
       </xsl:when>
       <xsl:otherwise>
         <xsl:apply-templates select="label[@lang = 'en']"/>
       </xsl:otherwise>
     </xsl:choose>
   </a>
  </xsl:template>


 
A+


---------------
A thing of beauty is a joy forever (John Keats)
n°491121
Manu la Sc​ience
...la science ... pas toujours
Posté le 19-08-2003 à 12:55:19  profilanswer
 

Salut à tous,
 
J'ai encore un problème pour mon menu. Je fais apparaître mes title dans un div, mes title2 dans un div enfant en tenant compte de l'arborescence, du style:
div du titre (I)
   div du titre2 (I.1)
   div du titre2 (I.2)
div du titre (II)
   div du titre2 (II.1)
etc...
La feuille xml est parsée avec la feuille xsl et les titres se retrouvent tous sous la forme de div (apparentes ou cachées).
Je souhaite mettre une fonction javascript dans le xsl pour lorsque l'on clique sur le titre (I), on affiche les titre2 (I.1 etI.2). Il me manque un bout de fonction en javascript qui me donne les enfants (div: I.1 et I.2) de l'élément courant (div: I) de la feuille html formée (car le javascript s'exécute côté client).
Pour être un peu plus clair: je suis dans un div (<div>ici</div> ) et je souhaite connaître les div imbriqués:
<div>
   <div/>
   <div/>
   <div/>
</div>
J'espère avoir bien expliquer ma question... :jap:


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°516873
Manu la Sc​ience
...la science ... pas toujours
Posté le 18-09-2003 à 08:35:32  profilanswer
 

Salut à tous,
 
je poste mon menu obtenu et pour lequel j'ai encore un problème.
Voici donc mon menu.xml

Code :
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <?xml-stylesheet type="text/xsl" href="menu.xsl" ?>
  3. <!DOCTYPE menu [
  4. <!ELEMENT menu (title*)>
  5. <!ELEMENT title (url, label*, title*)>
  6. <!ELEMENT url (#PCDATA)>
  7. <!ELEMENT label (#PCDATA)>
  8. <!ATTLIST label
  9. lang NMTOKEN #IMPLIED
  10. >
  11. ]>
  12. <menu>
  13. <title>
  14.  <url>accueil.php</url>
  15.  <label lang="fr">Accueil</label>
  16.  <label lang="en">Home</label>
  17. </title>
  18. <title>
  19.  <url>news.xml</url>
  20.  <label lang="fr">Nouvelles</label>
  21.  <label lang="en">News</label>
  22. </title>
  23. <title>
  24.  <url>ressource.php</url>
  25.  <label lang="fr">Ressources</label>
  26.  <label lang="en">Search</label>
  27.  <title>
  28.   <url>ressources_region.php</url>
  29.   <label lang="fr">Regions</label>
  30.   <label lang="en">Land</label>
  31.  </title>
  32.  <title>
  33.   <url>ressources_taille.php</url>
  34.   <label lang="fr">Taille de la vigne</label>
  35.   <label lang="en">Wine's pruning</label>
  36.  </title>
  37.  <title>
  38.   <url>ressources_cepages.php</url>
  39.   <label lang="fr">Cepages</label>
  40.   <label lang="en">Cepages</label>
  41.  </title>
  42. </title>
  43. </menu>


 
On peut imbriquer indéfiniment les titles les uns dans les autres et l'affichage est géré par le menu.xsl:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  3. <xsl:output method="html"/>
  4.        
  5.   <!-- parametre de langue choisie par l'internaute -->
  6.   <xsl:param name="lang_choice"/>
  7.        
  8.        
  9. <!-- ******************************************************* -->
  10. <!-- ********************************************* MODELE ***-->
  11.   <!-- Modele applique a  l'ensemble du menu -->
  12.   <xsl:template match="/menu">
  13.     <html>
  14.     <head>
  15.                        
  16. <!-- ******************************************************* -->
  17. <!-- ******************************************** SCRIPT *** -->
  18. <!-- Script afficher dans la page html necessaire au bon affichage du menu -->
  19. <script>
  20.                        
  21. <!-- ******************************************************* -->
  22. <!-- ****************************************** FONCTION *** -->
  23. <!-- Pour chaque titre element fils de menu, permet d'afficher la premere fois ces elements titres -->
  24.  function initialiser(){
  25.    <xsl:for-each select='/menu/title'>
  26.   var mavar='<xsl:value-of select="concat('document.all.A0_',position(),'.style.visibility=&quot;visible&quot;;document.all.A0_',position(),'.style.display=&quot;&quot;')"/>';
  27.   eval(mavar);
  28.    </xsl:for-each>
  29.    }
  30.  <!-- Fin fonction d'initialisation -->
  31. <!-- ************************************** FIN FONCTION *** -->
  32. <!-- ******************************************************* -->
  33.                                
  34. <!-- ******************************************************* -->
  35. <!-- ****************************************** FONCTION *** -->
  36. <!-- Fonction permettant de changer le parametre d'affichage de l'element -->
  37.   function afficher(elt, mon_image){
  38.     var mes_objets;
  39.     var cet_objet;
  40.     var num_objet;
  41.     var nb_objets;
  42.     mes_objets = document.getElementById (elt).childNodes;
  43.     nb_objets = mes_objets.length;
  44.     for (num_objet = 0; num_objet &lt; nb_objets; num_objet++) {
  45.       cet_objet = mes_objets[num_objet];
  46.       if (cet_objet.nodeName == "DIV" ) {
  47.    if (cet_objet.style.visibility == "visible" ) {
  48.        cet_objet.style.visibility = "hidden";
  49.        cet_objet.style.display = "none";
  50.        mon_image.src = "closed.gif";
  51.    } else {
  52.        cet_objet.style.visibility = "visible";
  53.        cet_objet.style.display = "";
  54.        mon_image.src = "open.gif";
  55.    }
  56.        }
  57.     }
  58.   }
  59. <!-- Fin fonction de changement de parametre -->
  60. <!-- ************************************** FIN FONCTION *** -->
  61. <!-- ******************************************************* -->
  62.          </script>
  63.          <!-- Fin des scripts d'affichage du menu -->
  64. <!-- **************************************** FIN SCRIPT *** -->
  65. <!-- ******************************************************* -->
  66.          </head>
  67. <!-- Au chargement du body, permet d'initialiser le menu -->
  68.  <body onload="initialiser()">        <!-- Applique le modele de gestion de menu -->
  69.     <xsl:apply-templates select="title"/>
  70.  </body>
  71. </html>
  72. </xsl:template>
  73. <!-- Fin du modele applique a  l'ensemble du menu -->
  74. <!-- **************************************** FIN MODELE *** -->
  75. <!-- ******************************************************* -->
  76. <!-- ******************************************************* -->
  77. <!-- ******************************************** MODELE *** -->
  78. <!-- Modele de gestion de titre -->
  79. <xsl:template match="title">
  80.    <!-- Initialisation du parametre "decalage" permettant de gerer l'affichage des elements descendants avec un retrait -->
  81.    <xsl:param name="decalage" select="0"/>
  82.    <!-- Initialisation de la variable d'identification de l'element titre en cours -->
  83.    <xsl:variable name="Ident" select="concat('A',$decalage ,'_',position())"/>
  84.    <!-- Creation d'une DIV pour l'element en cours avec passage du parametre decalage et de la variable d'identification -->
  85.    <DIV style="left:{$decalage}; position:'relative'; visibility:'hidden'; display:'none'" ID="{$Ident}">
  86. <a href="#"><img src="closed.gif" border="0" onClick="afficher('{$Ident}', this);"/></a>
  87. <xsl:call-template name="langue">
  88.    <xsl:with-param name="DivID" select="$Ident"/>
  89. </xsl:call-template><br/>
  90. <xsl:apply-templates select="title">
  91.    <xsl:with-param name="decalage" select="$decalage + 10"/>
  92. </xsl:apply-templates>
  93.     </DIV>
  94. </xsl:template>
  95. <!-- Fin du modele de gestion de menu -->
  96. <!-- **************************************** FIN MODELE *** -->
  97. <!-- ************************************************************ -->
  98. <!-- ************************************************************ -->
  99. <!-- ******************************************** MODELE *** -->
  100. <!-- Modele de gestion des langues -->
  101. <xsl:template name="langue">
  102.        
  103.    <xsl:param name="DivID"/>
  104.    <!-- Creation d'un lien cliquable renvoyant la page à afficher à droite -->
  105.       <a href="{./url}" target="droite">
  106.          <!-- Choisir parmi toutes les balises label celle qui possede le meme attribut que celui passé en parametre a  la page -->
  107.          <xsl:choose>
  108.             <!-- Si l'attribut de la balise label appele lang est egal au parametre recu par la page -->
  109.             <xsl:when test="label[@lang = $lang_choice]">
  110.                 <!-- Affichage de cette balise desc_d_create -->
  111.                 <xsl:apply-templates select="label[@lang =$lang_choice]"/>
  112.     </xsl:when>
  113.             <!-- Sinon, affichage de la balise label correspondant à  la langue par defaut (ici, l'anglais) -->
  114.     <xsl:otherwise>
  115.                 <xsl:apply-templates select="label[@lang = 'en']"/>
  116.             </xsl:otherwise>
  117.          </xsl:choose>
  118.          <!-- Fin du choix -->
  119.       </a>
  120.       <!-- Fin du lien cliquable -->
  121. </xsl:template>
  122. <!-- Fin du modele de gestion du titre de d_create -->
  123. <!-- **************************************** FIN MODELE *** -->
  124. <!-- ******************************************************* -->
  125. </xsl:stylesheet>


 
J'en viens donc à ma question: sous IE5 et +, mon menu apparait non déroulé et sous mozila il est déroulé et sans tabulations permettant de visualiser les niveaux hiérarchiques. Je pense que cela vient du javascript utilisé et pas très bien supporté par mozila.
Quelqu'un voit il où mon code pêche et ce qu'il vaudrait mieux que je fasse.
 
Merci


Message édité par Manu la Science le 18-09-2003 à 16:38:49

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Créer un lien dans XSL en fonction de données dans XML

 

Sujets relatifs
probleme de fonctionCréer un programme multi langue ?
Référence à une fonction d'une autre classecaster une fonction
Phpbb et base de données[HTML/JS] Ouvrir un lien dans une nouvelle fenêtre ?
[JS] Est-il possible de désactiver un lien?ajouter un lien vers une page si sa derniere modif a moins de 15j
[XML] Recuper des données dans un fichier XML 
Plus de sujets relatifs à : Créer un lien dans XSL en fonction de données dans XML


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR