prb xsl xml affichage

prb xsl xml affichage - XML/XSL - Programmation

Marsh Posté le 11-07-2005 à 11:32:25    

Bonjour,
Je souhaite faire un menu déroulant intéractif qui se deplierait et se replierait suivant choix de l'utilisateur.
Jusqu'ici, j'obtient un menu avec +nom_categorie
 si l'utilisateur clique sur le +, le menu se déroule
 s'il clique sur nom_categ, le lien hypertexte rattaché à nom_categorie fonctionne et affiche une nouvelle page. Le problème est qu'il dépli aussi le menu !! j'arrive pas à dissocier ces deux actions !!!
J'ai vraiment besoin de votre aide, je ne sais plus quoi faire!!
merci beaucoup !!
 
voici mon code xml:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <?xml-stylesheet href="styles.xsl" type="text/xsl"?>
  3. <site>
  4. <file><num>1</num><nom>projets</nom>
  5.  <file><num>2</num><nom>monétique</nom>
  6.   <file><num>5</num><nom>cartes</nom>
  7.    <file><num>6</num><nom>CB</nom>
  8.  </file>
  9.  </file>
  10.  </file>
  11.  <file><num>3</num><nom>matériel</nom>
  12.  </file>
  13.  <file><num>4</num><nom>logiciel</nom>
  14.  </file>
  15.  </file>
  16. </site>


 
code xsl :

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <?LINK rel="stylesheet" type="text/css" href="styles.css"?>
  3. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  4. <xsl:template match="file">
  5. <script>
  6. <![CDATA[
  7. var deplier = true;
  8. var replier = false;
  9. function deplirepli(dossier, depli) {
  10. plus = dossier.children[0];
  11. moins = dossier.children[1];
  12. div = dossier.parentElement;
  13. moins.style.display = depli ? "" : "none";
  14. plus.style.display = depli ? "none" : "";
  15. dossier.title="Cliquer pour " + (depli ? "re" : "de" ) + "plier";
  16. div.children[1].style.display= depli ? "" : "none";
  17. }
  18. function toggleDisplay(dossier) {
  19. plus = dossier.children[0];
  20. if (plus.style.display=="" )
  21.     // le signe plus est visible : il faut déplier  
  22.     {
  23.      deplirepli(dossier, deplier);
  24.      }
  25. else
  26.     // replier
  27.      {
  28.      deplirepli(dossier, replier);
  29.      }
  30. }
  31. ]]>
  32. </script>
  33. <div>
  34.     <div class="title" onclick="toggleDisplay(this)" >
  35.     <SPAN>+</SPAN><SPAN STYLE="display:none" >-</SPAN>
  36.     <a href="central.php?page={num}" target="central">
  37.     <xsl:value-of select="nom"/>
  38.     </a>
  39.     </div>
  40.     <div CLASS="wrapping" STYLE="display:none">
  41.     <xsl:apply-templates select="file"/>
  42.     </div>
  43. </div>
  44. </xsl:template>
  45. </xsl:stylesheet>

Reply

Marsh Posté le 11-07-2005 à 11:32:25   

Reply

Marsh Posté le 13-07-2005 à 12:06:04    

Un template nommé file qui fait un apply-templates select="file" ça me fait tout chose, ça sent la boucle infinie voir si le moteur de transformations s'en sort: des effets de bords spectaculaires...
 
Un menu déroulant c'est une liste avec un styling css un peu pointu nan?  

Reply

Marsh Posté le 13-07-2005 à 12:09:07    

avander a écrit :

Un template nommé file qui fait un apply-templates select="file" ça me fait tout chose, ça sent la boucle infinie voir si le moteur de transformations s'en sort: des effets de bords spectaculaires...


Non, ça fonctionne, j'utilise ça pour faire des listes imbriquées :)

Reply

Marsh Posté le 13-07-2005 à 12:11:29    

Beaucoup d'erreurs dans le code XHTML (balises majuscule, style inline pas cool), et le JS est bizarrement goupillé :heink:

Reply

Marsh Posté le 18-07-2005 à 13:56:46    

salut, pour les erreurs du code xhtml, faut mettre toutes les balises en minuscule ? tu entends quoi par style inline ? pour le JS, j'ai repris ce qui est proposé sur http://www.chez.com/xml/applis/. Cela me paraissait bien (ça marche!!) mais je débute dans tout ce qui est xsl, xml, javascript... si tu as des conseils a me donner, je suis preneuse!!!
 
Merci beaucoup

Reply

Marsh Posté le 18-07-2005 à 14:18:28    

celine65 a écrit :

salut, pour les erreurs du code xhtml, faut mettre toutes les balises en minuscule ? tu entends quoi par style inline ? pour le JS, j'ai repris ce qui est proposé sur http://www.chez.com/xml/applis/. Cela me paraissait bien (ça marche!!) mais je débute dans tout ce qui est xsl, xml, javascript... si tu as des conseils a me donner, je suis preneuse!!!
 
Merci beaucoup


  • minuscule, je crois.
  • style inline : style présent directement dans les balises (Il vaut mieux mettre les styles ailleurs : en entête entre la balise style ou mieux, dans un fichier css)
Code :
  1. <a style="text-decoration: blink">Attention les yeux</a>


  • Pour le JS : j'y connais rien  :D (mais à vu de nez, moi ça me va...) : Mais il y a peut être moyen de remplacer le onClick. (fait une recherche sur le forum avec javascript non obstrusif ou quelque chose comme ça, il y a un message très interessant dessus normalement)
  • Pour ton problème de dépliement, je pense que c'est parce que ton liens est dans le div qui a le onClick, donc quand tu clique sur le liens, peut être que ça active le onclick du div, mais bon...j'suis pas sûr de moi sur ce coup là.  :(


Message édité par zapan666 le 18-07-2005 à 14:23:31

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 18-07-2005 à 14:58:37    

Pour le style inline, je vois pas trop.. j'ai une feuille de style css (styles.css), j'y fais appel avec class=".." ??
 
Pour le prb de déploiement,c'est effectivement les div qui clochent.. Je n'arrive pas à en sortir le <xsl:value-of select="nom"/>, si je le met entre les deux balises div, ma liste imbriquée ne fonctionne plus, si je le met après les deux div, le nom n'est plus à coté des signes + et - mais tout à la fin de la liste..?
 
Je vais aller voir du côté du javascript que tu m'a indiqué, peut-être que sans le onclick.. merci !!!

Reply

Marsh Posté le 18-07-2005 à 15:09:46    

celine65 a écrit :

Pour le style inline, je vois pas trop.. j'ai une feuille de style css (styles.css), j'y fais appel avec class=".." ??


Pas bien :

Code :
  1. <SPAN STYLE="display:none" >


 
Bien :  

Code :
  1. <span class="deplieur">+</span>


code css (style.css)

Code :
  1. span.deplieur { display: none }


 

celine65 a écrit :


Je vais aller voir du côté du javascript que tu m'a indiqué, peut-être que sans le onclick.. merci !!!


ça va pas résoudre le problème, c'est juste que a la place de faire
<a onclick="mafonction">, tu aura juste a faire <a>, et ton javascript va se "greffer" automatiquement à ton <a> (ça revient au même que <a onclick> )
 
 


---------------
my flick r - Just Tab it !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed