problème de menu dynamique

problème de menu dynamique - HTML/CSS - Programmation

Marsh Posté le 30-05-2004 à 18:05:14    

salut all
 
j'ai trouvé ce menu dynamique sur je ne sais plus quel site, et je l'ai modifié selon mes besoins. seulement je ne connais pas le javascript et j'ai un problème : quand on sélectionne une page, celle ci s'ouvre normalement mais le menu se referme. je souhaite qu'il reste ouvert sur la catégorie à laquelle appartient la page. quelqu'un pourrait m'aider ? voici le code :
 

Code :
  1. /* Daniel Fabien - webmaster@script-masters.com
  2. *  Script Masters - http://www.script-masters.com/  
  3. *  
  4. *  Menu vertical dynamique
  5. *  Vous pouvez utilisé ce script sous reserve de conserver ce message
  6. */
  7. //------------------- Options  ------------------------//
  8. var largeurMenu = 230     // Pour régler la largeur du menu
  9. var policeMenu = "Verdana"    // Police pour les menus
  10. var taillePoliceMenu = "14"    // Taille de la police du menu
  11. var couleurPoliceMenu = "#FFFFFF"   // Couleur de la police du menu
  12. var couleurBordure = "#000000"    // Couleur de la bordure du menu
  13. var couleurFond = "#C0C0D0"    // Couleur du fond du menu
  14. var couleurFond2 = "#A7ADB7"    // Couleur du fond des sous menus
  15. var couleurLienRollOver = "#339966"   // Couleur des liens lors du rollover
  16. var couleurFondRollOver = "#959EAD"   // Couleur du fond sur Rollover
  17. var largeurBordure = 3     // Largeur de la bordure
  18. var alignementTexteCategorie = "left"   // Alignement du texte des categories
  19. var alignementTexteSS = "center"   // Alignement du texte des sous menus
  20. //------------------- Valeurs du menu  ------------------------//
  21. // nom de chaque menu - Vous pouvz en rajouter autant que vous le souhaitez
  22. var menu = new Array();
  23. menu[0]="Droit d'auteur";
  24. menu[1]="GPL";
  25. menu[2]="Brevets logiciels";
  26. var ssmenuNom = new Array();
  27. var ssmenuLien = new Array();
  28. var ssmenuTarget = new Array();
  29. // Valeurs sous le premier menu
  30. ssmenuNom[0] = new Array();
  31. ssmenuLien[0] = new Array();
  32. ssmenuTarget[0] = new Array();
  33. ssmenuNom[0][0] = "Préambule terminologique"; // Nom du lien
  34. ssmenuLien[0][0] = "preambule_terminologique.htm"; // Adresse
  35. ssmenuTarget[0][0] = "_top";    // ouvrir une fenetre : _blank
  36.       // ds la même fenetre : _top
  37.       // ds une frame : nom de la frame
  38. ssmenuNom[0][1] = "Sources";
  39. ssmenuLien[0][1] = "sources.htm";
  40. ssmenuTarget[0][1] = "_top";
  41. ssmenuNom[0][2] = "Droit d'auteur";
  42. ssmenuLien[0][2] = "droit_d_auteur.htm";
  43. ssmenuTarget[0][2] = "_top";
  44. ssmenuNom[0][3] = "Contenu du droit d'auteur";
  45. ssmenuLien[0][3] = "contenu_du_droit_d_auteur.htm";
  46. ssmenuTarget[0][3] = "_top";
  47. ssmenuNom[0][4] = "Protection des oeuvres informatiques";
  48. ssmenuLien[0][4] = "protection_des_oeuvres_informatiques.htm";
  49. ssmenuTarget[0][4] = "_top";
  50. ssmenuNom[0][5] = "Lexique";
  51. ssmenuLien[0][5] = "lexique.htm";
  52. ssmenuTarget[0][5] = "_top";
  53. ssmenuNom[0][6] = "<i>Accueil</i>";
  54. ssmenuLien[0][6] = "index.htm";
  55. ssmenuTarget[0][6] = "_top";
  56. // Valeurs sous le second menu - Répéter opération
  57. ssmenuNom[1] = new Array();
  58. ssmenuLien[1] = new Array();
  59. ssmenuTarget[1] = new Array();
  60. ssmenuNom[1][0] = "Avant propos";
  61. ssmenuLien[1][0] = "avant_propos.htm";
  62. ssmenuTarget[1][0] = "_top";
  63. ssmenuNom[1][1] = "Definition de la GPL";
  64. ssmenuLien[1][1] = "definition.htm";
  65. ssmenuTarget[1][1] = "_top";
  66. ssmenuNom[1][2] = "Historique de la GPL";
  67. ssmenuLien[1][2] = "historique.htm";
  68. ssmenuTarget[1][2] = "_top";
  69. ssmenuNom[1][3] = "Diff&eacute;rence entre les logiciels libres et les autres";
  70. ssmenuLien[1][3] = "differences.htm";
  71. ssmenuTarget[1][3] = "_top";
  72. ssmenuNom[1][4] = "Qualification du logiciel libre";
  73. ssmenuLien[1][4] = "qualification_logiciel_libre.htm";
  74. ssmenuTarget[1][4] = "_top";
  75. ssmenuNom[1][5] = "Qualification du contrat de licence";
  76. ssmenuLien[1][5] = "qualification_contrat_licence.htm";
  77. ssmenuTarget[1][5] = "_top";
  78. ssmenuNom[1][6] = "Caracteristiques de la GPL";
  79. ssmenuLien[1][6] = "caracteristiques_gpl.htm";
  80. ssmenuTarget[1][6] = "_top";
  81. ssmenuNom[1][7] = "Obligations du donneur de licence";
  82. ssmenuLien[1][7] = "obligations_donneur.htm";
  83. ssmenuTarget[1][7] = "_top";
  84. ssmenuNom[1][8] = "Obligations du licenci&eacute;";
  85. ssmenuLien[1][8] = "obligations_du_licencie.htm";
  86. ssmenuTarget[1][8] = "_top";
  87. ssmenuNom[1][9] = "<i>Accueil</i>";
  88. ssmenuLien[1][9] = "index.htm";
  89. ssmenuTarget[1][9] = "_top";
  90. // Valeurs sous le troisieme menu - idem
  91. ssmenuNom[2] = new Array();
  92. ssmenuLien[2] = new Array();
  93. ssmenuTarget[2] = new Array();
  94. ssmenuNom[2][0] = "Gen&egrave;se du probl&egrave;me";
  95. ssmenuLien[2][0] = "intro_brevet.htm";
  96. ssmenuTarget[2][0] = "_top";
  97. ssmenuNom[2][1] = "Pour le brevet logiciel";
  98. ssmenuLien[2][1] = "argument_faveur_brevet.htm";
  99. ssmenuTarget[2][1] = "_top";
  100. ssmenuNom[2][2] = "Contre le brevet logiciel";
  101. ssmenuLien[2][2] = "contre_brevet.htm";
  102. ssmenuTarget[2][2] = "_top";
  103. ssmenuNom[2][3] = "<i>Accueil</i>";
  104. ssmenuLien[2][3] = "index.htm";
  105. ssmenuTarget[2][3] = "_top";
  106. //------------------- Ne rien modifier ------------------------//
  107. var nbMenu = menu.length;
  108. //------------------- Rendu dynamique  ------------------------//
  109. //On détecte le browser
  110. var ie=document.all
  111. var ns6=document.getElementById&&!document.all
  112. function montreMenu(num){
  113. for (var i=0; i<nbMenu; i++) {
  114.  if (ie) {
  115.   objet = document.all["ssmenu"+i]
  116.  } else if (ns6) {
  117.   objet = document.getElementById("ssmenu"+i);
  118.  }
  119.  if (objet.style.display == "" ){
  120.   objet.style.display = "none"
  121.  }
  122. }
  123. if (ie) {
  124.  objet = document.all["ssmenu"+num]
  125. } else if (ns6) {
  126.  objet = document.getElementById("ssmenu"+num);
  127. }
  128. if (objet.style.display == "none" ){
  129.  objet.style.display = ""
  130. }
  131. }
  132. function rollOver(lien) {
  133. lien.style.background = couleurFondRollOver;
  134. lien.style.color = couleurLienRollOver;
  135. }
  136. function rollOut(lien) {
  137. lien.style.background = couleurFond2;
  138. lien.style.color = couleurPoliceMenu;
  139. }
  140. function ouvreLien(url,mode) {
  141. if (mode == "_blank" ) {
  142.  window.open(url)
  143. } else if (mode == "_top" )  {
  144.  window.top.location.href = url
  145. } else {
  146.  window.top.parent.frames[mode].location.href  = url
  147. }
  148. }
  149. //------------------- Génération du menu  ------------------------//
  150. function affiche () {
  151. document.write("<style type='text/css'>" );
  152. document.write("td.menu {" );
  153. document.write(" text-align: "+alignementTexteCategorie+";" );
  154. document.write(" font-family: "+policeMenu+";" );
  155. document.write(" font-size: "+taillePoliceMenu+"px;" );
  156. document.write(" color: "+couleurPoliceMenu+";" );
  157. document.write(" border: 1px solid "+couleurBordure+";" );
  158. document.write(" background-color: "+couleurFond+";" );
  159. document.write("}" );
  160. document.write("table.ssmenu {" );
  161. document.write(" text-align: "+alignementTexteSS+";" );
  162. document.write(" font-family: "+policeMenu+";" );
  163. document.write(" font-size: "+taillePoliceMenu+"px;" );
  164. document.write(" color: "+couleurPoliceMenu+";" );
  165. document.write(" border: 1px solid "+couleurBordure+";" );
  166. document.write(" background-color: "+couleurFond2+";" );
  167. document.write("}" );
  168. document.write("</style>" );
  169. document.write("<table width='"+largeurMenu+"' border='5' cellspacing='0' cellpadding='0'>" );
  170. //1ere boucle
  171. for (i=0; i<nbMenu; i++) {
  172.  document.write("<tr>" );
  173.  document.write("<td onMouseOver='montreMenu("+i+" )' style='cursor:hand' class='menu'>"+menu[i]+"</td>" );
  174.  document.write("</tr>" );
  175.  document.write("<tr style='display:none' id='ssmenu"+i+"'>" );
  176.  document.write("<td>" );
  177.   //<!--Un espace-->
  178.  document.write("<table width='"+largeurMenu+"' border='"+largeurBordure+"' cellspacing='0' cellpadding='0'>" );
  179.  document.write("<tr>" );
  180.  document.write("<td width='2'></td>" );
  181.  document.write("</tr>" );
  182.  document.write("</table>" );
  183.  //<!--Le sous menu-->
  184.  document.write("<table width='"+largeurMenu+"' border='0' cellspacing='0' cellpadding='0' class='ssmenu'>" );
  185.      // seconde boucle
  186.  for (z=0; z<ssmenuNom[i].length; z++) {
  187.   document.write("<tr>" );
  188.   document.write("<td onMouseOver='rollOver(this)' onMouseOut='rollOut(this)' onClick='ouvreLien(\""+ssmenuLien[i][z]+"\",\""+ssmenuTarget[i][z]+"\" )' style='cursor:hand'>"+ssmenuNom[i][z]+"</td>" );
  189.   document.write("</tr>" );
  190.       //fin seconde boucle
  191.  }
  192.  document.write("</table>" );
  193.  document.write("</td>" );
  194.  document.write("</tr>" );
  195.  document.write("<tr>" );
  196.  document.write("<td width='2'></td>" );
  197.  document.write("</tr>" );
  198.  // fin 1 ere boucle
  199.  }
  200. document.write("</table>" );
  201. }


 
 
edit : c'est pour le site d'un copain. le rendu est visible ici :
http://perso.club-internet.fr/jocelyn.dioux/
à gauche


Message édité par psychotek le 30-05-2004 à 18:06:36
Reply

Marsh Posté le 30-05-2004 à 18:05:14   

Reply

Marsh Posté le 30-05-2004 à 21:13:46    


 
Salut
 

Citation :

j'ai trouvé ce menu dynamique sur je ne sais plus quel site, et je l'ai modifié selon mes besoins. seulement je ne connais pas le javascript


 
Tu ne connais pas le JS et tu modifies un menu en JS trouvé sur le net ?
Où est l'erreur ?

Citation :


et j'ai un problème : quand on sélectionne une page, celle ci s'ouvre normalement mais le menu se referme. je souhaite qu'il reste ouvert sur la catégorie à laquelle appartient la page. quelqu'un pourrait m'aider ?


 
Hors de question.
 
Ce code n'est pas de toi, on aide pas les gens sur des codes qu'ils n'ont pas produits.
En outre, si tu ne connais rien au JS, on ne pourra pas t'aider étant donné qu'on ne va pas TRAVAILLER pour toi, mais éventuellement te conseiller sur tel ou tel aspect...
 

Citation :

edit : c'est pour le site d'un copain.


 
ça pourrait être pour le site du Pape que ce serait rigoureusement pareil.
 
Un bon conseil : Apprend le JS, d'autant qu'un menu en JS (ne parle pas de menu dynamique, le terme dynamique il vaut mieux le réserver pour les langages serveurs je trouve...) ça casse pas 3 pattes à un canard.
 
Il s'agit juste de faire apparaitre/disparaitre des éléments HTML via des propriétés CSS controlées par JS.

Reply

Marsh Posté le 31-05-2004 à 10:47:53    

Citation :


Tu ne connais pas le JS et tu modifies un menu en JS trouvé sur le net ?
Où est l'erreur ?


 
il n'y a pas d'erreur, ce menu était là pour ça. d'autre part, j'avais besoin d'un menu dynamique et pas le temps d'apprendre le javascript ou le php ou ce que tu veux pour en faire un de toute pièces.
 

Citation :


Hors de question.
 
Ce code n'est pas de toi, on aide pas les gens sur des codes qu'ils n'ont pas produits.
En outre, si tu ne connais rien au JS, on ne pourra pas t'aider étant donné qu'on ne va pas TRAVAILLER pour toi, mais éventuellement te conseiller sur tel ou tel aspect...


 
d'autres pourraient considérer qu'aider quelqu'un sur un problème qu'il a rencontré n'est pas TRAVAILLER pour lui. je pensais que le problème était simple à résoudre, une simple ligne à virer. ce n'est pas irrealiste, ça peut très bien être une fonction appelée à chaque clic qui re-génère le menu. je n'arrive pas à me repérer dans le code, n'en étant pas familier, voila tout. d'autre part si j'avais voulu faire travailler des gens pour moi, je me serai adressé à des professionnel que j'aurais payé, et je ne serais pas venu sur un forum d'entre aide. tu semblais avoir bien compris le concept d'entre aide sur un autre topic que celui ci où on avait pu discuter. mais à la réflexion, tu ne m'y avais pas aidé non plus.
 
 

Citation :


ça pourrait être pour le site du Pape que ce serait rigoureusement pareil.


 
voila un conseil constructif. ma phrase était juste une intro pour mettre le lien.
 

Citation :


Un bon conseil : Apprend le JS, d'autant qu'un menu en JS (ne parle pas de menu dynamique, le terme dynamique il vaut mieux le réserver pour les langages serveurs je trouve...) ça casse pas 3 pattes à un canard.
 
Il s'agit juste de faire apparaitre/disparaitre des éléments HTML via des propriétés CSS controlées par JS.


 
comme je le disais, on a pas toujours le temps d'apprendre tout ce qu'on veut. chus sûr que si je pouvais apprendre le chinois, la cuisine et la plomberie ça me servirait vachement. ceci dit on a pas le temps pour tout, donc quand j'ai besoin je change un joint sans savoir le faire, et si je ne sais pas combien de temps il faut laisser cuire mes pates je demande de l'aide. c'est ce que je fais ici, et ce n'est pas dans le but de me faire insulter par qui que ce soit.
 
ce qui comprend toi, qui est du genre (il y en a sur tous les forums) "j'en sais beaucoup mais je ne veux rien dire je préfère être désagréable avec les gens". ne dis pas le contraire, car tu aurais pu exprimer la même idée sans être insultant et désagréable. que tu t'y connaisses ou pas en html et en javascript, tu n'es pas un exemple. ton comportement signifie "je veux que les gens m'admirent pour ce que je sais faire, mais les aider, pff, à quoi bon s'abaisser à ça ? c'est plus marrant de répondre de manière désinvolte" et donc, insultante.

Reply

Marsh Posté le 31-05-2004 à 11:01:01    

psychotek a écrit :


 
il n'y a pas d'erreur, ce menu était là pour ça. d'autre part, j'avais besoin d'un menu dynamique et pas le temps d'apprendre le javascript ou le php ou ce que tu veux pour en faire un de toute pièces.


 
Ben nous, on a pas le temps de debbuguer ou d'ajouter des features à des applies, encore plus quand ces applies sont pecho sur le net.
 

Citation :


d'autres pourraient considérer qu'aider quelqu'un sur un problème qu'il a rencontré n'est pas TRAVAILLER pour lui.


 
Debbuguer un menu en DHTML trouvé sur le net, c'est pas notre boulot. Si tu n'es pas satisfait de ce menu, tu t'adresses à son auteur.

Citation :


 
tu semblais avoir bien compris le concept d'entre aide sur un autre topic que celui ci où on avait pu discuter. mais à la réflexion, tu ne m'y avais pas aidé non plus.


 
C'est toi qui n'as pas compris le concept d'aide sur ce forum. Ici, on aide les gens à devenir autonomes. On les aide à apprendre et à comprendre...

Citation :


comme je le disais, on a pas toujours le temps d'apprendre tout ce qu'on veut. chus sûr que si je pouvais apprendre le chinois, la cuisine et la plomberie ça me servirait vachement. ceci dit on a pas le temps pour tout, donc quand j'ai besoin je change un joint sans savoir le faire, et si je ne sais pas combien de temps il faut laisser cuire mes pates je demande de l'aide. c'est ce que je fais ici, et ce n'est pas dans le but de me faire insulter par qui que ce soit.


 
Ben c'est bien ce que je dis. Si tu as un problème avec ta plomberie, tu appelleras un plombier.  
 
Tu as toujours 2 solutions quelque soit le domaine :
 
Soit tu apprends à faire les choses, soit tu appelles un professionnel. Personne ne va venir travailler gratuitement pour toi.
 
D'autres part, tu me montres où je t'ai insulté qu'on rigole un bon coup ?


Message édité par Hermes le Messager le 31-05-2004 à 11:01:52
Reply

Marsh Posté le 31-05-2004 à 11:35:28    

Hermes le Messager a écrit :

Ben nous, on a pas le temps de debbuguer ou d'ajouter des features à des applies, encore plus quand ces applies sont pecho sur le net.
 
Debbuguer un menu en DHTML trouvé sur le net, c'est pas notre boulot. Si tu n'es pas satisfait de ce menu, tu t'adresses à son auteur.
 
C'est toi qui n'as pas compris le concept d'aide sur ce forum. Ici, on aide les gens à devenir autonomes. On les aide à apprendre et à comprendre...
 
Ben c'est bien ce que je dis. Si tu as un problème avec ta plomberie, tu appelleras un plombier.  
 
Tu as toujours 2 solutions quelque soit le domaine :
 
Soit tu apprends à faire les choses, soit tu appelles un professionnel. Personne ne va venir travailler gratuitement pour toi.
 
D'autres part, tu me montres où je t'ai insulté qu'on rigole un bon coup ?


 
je vais essayer de répondre en bloc parce que ça part en troll. ce que tu fais ici n'est pas un "boulot", et tu n'as pas de "boulot" attitré. soit tu veux aider et tu aides, soit tu t'abstients de répondre. personne ne t'en voudra. quand tu dis "on a pas le temps de débugger" alors qu'est-ce que tu fais ici ? si tu n'as pas le temps, pourquoi tu traines sur le forum ?
d'autre part, le concept d"aide sur un forum" n'est pas normalisé, contrairement à ce que tu sous-entends. aider quelqu'un, ça peut se faire de différentes manières. si tu m'avais dis "tiens c'est cette ligne qui pose problème" là ça m'aurait aidé. j'ai pour objectif d'apprendre le css en ce moment, pas le javascript. ça tu ne pouvais pas le savoir (quoique, on en avait parlé ailleurs), donc tu aurais dû partir du postulat que d'essayer de m'inciter à apprendre le javascript n'était pas une forme d'aide dans le cas présent. et c'est d'ailleurs là où tu as été insultant, car tu aurais pu dire les choses de manière plus courtoise, ou bien t'abstenir de répondre. la manque de courtoisie est une insulte. surtout à l'écrit.
si tu n'avais pas répondu au topic, ça n'aurait pas posé de problème. moi quand je ne peux - ou ne veux - pas aider quelqu'un, je passe mon chemin. je ne m'arrête pas pour lui dire "t'as qu'à apprendre" parce que, bien sûr, il n'a qu'à apprendre. tout problème est résolu par l'apprentissage. c'est la réponse ultime ! tellement ultime qu'elle rend superflue le concept même de forum d'aide. les forums serviraient alors à aider à apprendre ? il y a google pour ça. moi j'aime profiter de l'expérience des gens, dans le sens où j'aime leur demander des conseils, savoir ce qui leur a posé problème, comment ils ont passé les obstacles. c'est pour ça que je viens sur des forums, quelque soit le sujet. quand un gars me dis "j'ai un problème avec l'install de la mandrake 10", je lui explique quels sont les problèmes que j'ai rencontré, et comment je les ai résolu, en espérant que ça pourra l'avancer. si je n'ai rien à dire, je ne dis rien. et surtout, je ne l'insulte pas par un désinvolte "t'as qu'à apprendre".
pour conclure sur la métaphore du plombier, quand j'ai besoin de changer  un joint et que je ne sais pas comment faire, je n'appelle pas forcément le plompbier. je fais appel à quelqu'un qui saura m'aider, et j'appelle pas ça du travail gratuit. comme un forum d'entre aide, je vais téléphoner à papi par exemple. il m'aidera gratuitement, mais le concept de rétribution ou de travail gratuit ne lui a même pas effleurer l'esprit (alors que ça semble omniprésent dans le tien). comme un forum.
 
une petite citation quand même pour l'absure :

Citation :


Tu as toujours 2 solutions quelque soit le domaine :
 
Soit tu apprends à faire les choses, soit tu appelles un professionnel. Personne ne va venir travailler gratuitement pour toi.  


la métaphore du plombier illustre bien à quel point ceci est faux. dans la vie, quand tu as un problème, il n'y a pas 2 solutions uniques et immuables. c'est un peu facile de tout rapporter à ça. dans ce cas, l'idée même de problème serait absurde puisqu'il suffirait de choisir entre tes deux solutions magiques. quand tu as un problème, il y a une infinité de solution, ou pas de solution, ou une solution, ou deux solutions, ou trois... c'est une vision trop terre à terre et irréaliste. la preuve : plutôt que de réagir comme tu l'as fait, c'est à dire en me proposant ces deux solutions, tu aurais pu m'en proposer une troisième du type "regarde à tel endroit du code", ou une quatrième avec "tiens sur ce site il y a des menus qui correspondent à ce que tu veux faire". tu vois bien que quelque soit le domaine, il n'y a pas 2 solutions de manière unique et immuable.

Reply

Marsh Posté le 31-05-2004 à 11:53:56    

cessons là ce débat stérile, qui nous fait perdre du temps à tous les deux. nous ne sommes manifestement pas d'accord et ne nous accorderons pas, alors restons en là. ;-)

Reply

Sujets relatifs:

Leave a Replay

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