menu en PHP/mySQL

menu en PHP/mySQL - PHP - Programmation

Marsh Posté le 19-10-2010 à 14:59:28    

Bonjour a toutes et tous,
je voulais savoir si quelqu'un pouvait m'aider à faire un menu en PHP/SQL comme celui-ci :
 
http://css.developpez.com/galerie/ [...] roulant2/#
 
En récupérant les titres "menu1","menu1",etc. à partir d'une SGBD SQL et les sous-menu également.
 
J'ai des notions en php/sql, il me faudrait juste un petit coup de pouce s'il vous plait
 
Merci pour votre aide.

Reply

Marsh Posté le 19-10-2010 à 14:59:28   

Reply

Marsh Posté le 19-10-2010 à 15:19:11    

Quelle est la difficulté? Qu'est-ce que tu n'arrives pas à faire toi-même?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-10-2010 à 18:38:58    

soit tu pars sur 2 tables mysql
soit tu pars sur 1 tables mysql hiérarchisé
 
ensuite comme le dit skeye, où ce trouve ta/tes difficulté/s :??:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 19-10-2010 à 21:07:46    

Bonsoir,
j'ai posté le message de chez ma soeur et je n'avais pas mon code source.
 
J'ai deux tables comme cela :
 

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, numssrubrique INT not null, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
Elles contiennent les données suivantes :
 

Code :
  1. INSERT INTO rubrique (numrubrique, nomrubrique, numssrubrique) VALUES ("1", "écrits", "1" ), ("2", "scènes", "2" );
  2. INSERT INTO ss_rubrique (numssrubrique, nomssrubrique, photossrubrique, numrubrique) VALUES ("1", "théâtre", "foto1.gif", "1" ), ("2", "enfance et jeunesse", "foto2.gif", "2" );


 
J'ai trois fichiers.
 
Un fichier appelé functions.js qui contient la fonction pour le menu :
 

Code :
  1. function afficheMenu(obj){
  2.    
  3.     var idMenu     = obj.id;
  4.     var idSousMenu = 'sous' + idMenu;
  5.     var sousMenu   = document.getElementById(idSousMenu);
  6.    
  7.     /*****************************************************/
  8.     /**    on cache tous les sous-menus pour n'afficher    **/
  9.     /** que celui dont le menu correspondant est cliqué **/
  10.     /** où 4 correspond au nombre de sous-menus         **/
  11.     /*****************************************************/
  12.     for(var i = 1; i <= 4; i++){
  13.         if(document.getElementById('sousmenu' + i) && document.getElementById('sousmenu' + i) != sousMenu){
  14.             document.getElementById('sousmenu' + i).style.display = "none";
  15.         }
  16.     }
  17.    
  18.     if(sousMenu){
  19.         //alert(sousMenu.style.display);
  20.         if(sousMenu.style.display == "block" ){
  21.             sousMenu.style.display = "none";
  22.         }
  23.         else{
  24.             sousMenu.style.display = "block";
  25.         }
  26.     }
  27.    
  28. }


 
 
Un fichier nommé style.css qui contient les styles pour le menu :
 

Code :
  1. *{
  2.     margin:0;
  3.     padding:0;
  4. }
  5. #menu{
  6.     width:150px;
  7.     margin:20px auto 0 auto;
  8. }
  9. .menu, .sousmenu{
  10.     text-align:center;
  11. }
  12. .menu{
  13.     height:18px;
  14.     width:150px;
  15.     padding:2px 0;
  16.     background:#404040;
  17.     color:#fff;
  18. }
  19. .sousmenu{
  20.     height:18px;
  21.     width:150px;
  22.     padding:1px 0;
  23.     background:#808080;
  24.     color:#fff;
  25. }
  26. .menu a{
  27.     display:block;
  28.     width:100%;
  29.     height:100%;
  30.     color:#fff;
  31.     font-family:arial,sans-serif;
  32.     font-size:12px;
  33.     font-weight:bold;
  34.     text-decoration:none;
  35.     background:#404040;
  36. }
  37. .sousmenu a{
  38.     display:block;
  39.     width:100%;
  40.     height:100%;
  41.     color:#123456;
  42.     font-family:arial,sans-serif;
  43.     font-size:12px;
  44.     font-weight:bold;
  45.     text-decoration:none;
  46. }
  47. .menu a:hover, .sousmenu a:hover, .menu a:active, .sousmenu a:active, .menu a:focus, .sousmenu a:focus{
  48.     color:#654321;
  49. }


 
 
La page sur laquelle j'appelle le menu dynamiquement ainsi que les fichiers "functions.js" et "style.css"  :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" />
  7. <meta name="description" content=" />
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.      <link rel="stylesheet" href="menu/style.css" type="text/css" />
  11.      <script type="text/javascript" src="menu/functions.js"></script>
  12. </head>
  13. <body>
  14. <table width="900" height="421" border="0" align="center" bgcolor="#000000">
  15.   <tr>
  16.     <td width="22">&nbsp;</td>
  17.     <td width="145" valign="top"><br />
  18.     <?php include"menu/menu.php" ?>; </td>
  19.     <td width="682" valign="top"><br />


 
 
Puis, le fichier du menu :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
  4. mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
  5. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE rubrique.numssrubrique = ss_rubrique.numssrubrique AND rubrique.numrubrique = ss_rubrique.numrubrique" ) or die ("impossible d'effectuer la requête" );
  6. $arrayFlag = array();
  7. while($shopone = mysql_fetch_array($req)){
  8. $nomrubrique = stripslashes($shopone['nomrubrique']);
  9. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  10. $nomrubrique2 = utf8_encode($nomrubrique);
  11. $nomssrubrique2 = utf8_encode($nomssrubrique);
  12. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  13. {
  14. print'
  15. <div id="menu">
  16.     <div class="menu" id="menu1" onclick="afficheMenu(this)">
  17.         <a href="#">'.$nomrubrique2.'</a>
  18.     </div>';
  19. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  20. print'<div id="sousmenu1" style="display:none">
  21.         <div class="sousmenu">
  22.             <a href="#">'.$nomssrubrique2.'</a>
  23.         </div>
  24.         </div>
  25.         </div>'; 
  26. }
  27. mysql_close();
  28. ?>


 
Pour l'instant, le résultat n'est pas terrible comme vous pourrez le constater :
 
http://www.la-grange-sardieres.fr/ [...] tation.php
 
Je voudrai le même résultat que le menu pris en exemple dans mon 1er message, mais dans ce que j'ai fait il y a quelque chose qui ne va pas.
 
Merci beaucoup pour votre aide.


Message édité par quaresma le 19-10-2010 à 21:10:33
Reply

Marsh Posté le 19-10-2010 à 22:35:55    

je crois qu'il y a un problème dans ton analyse :

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, numssrubrique INT not null, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
une rubrique à 0 ou plusieurs sousRubrique
une sousRubrique à 1 et 1 seule rubrique
 
ça devrais plutôt être comme ça :

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
du coup les données sont :

Code :
  1. INSERT INTO rubrique (numrubrique, nomrubrique) VALUES ("1", "écrits" ), ("2", "scènes" );
  2. INSERT INTO ss_rubrique (numssrubrique, nomssrubrique, photossrubrique, numrubrique) VALUES ("1", "théâtre", "foto1.gif", "1" ), ("2", "enfance et jeunesse", "foto2.gif", "2" );


 
ensuite au niveau du code PHP pour faire l'affichage je vois pas l'intérêt de cette la variable ligne 6 :

Code :
  1. $arrayFlag = array();


 
Edit :
horreur la requête SQL vient de me bruler les yeux,

Code :
  1. SELECT * FROM rubrique, ss_rubrique WHERE rubrique.numssrubrique = ss_rubrique.numssrubrique


 
Edit :
correction de frappe


Message édité par stef_dobermann le 20-10-2010 à 10:07:31

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 19-10-2010 à 22:38:46    

Ok pas mal de fautes déjà aïe.
Je crois que je vais avoir besoin d'une précieuse aide... :whistle:

Reply

Marsh Posté le 20-10-2010 à 22:23:06    

J'ai fait des modifications, mais le résultat n'est pas encore terrible :(
 
Voici mon nouveau code :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
  4. mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
  5. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique" ) or die ("impossible d'effectuer la requête" );
  6. $arrayFlag = array();
  7. print'<div id="menu">';
  8. while($shopone = mysql_fetch_array($req)){
  9. $nomrubrique = stripslashes($shopone['nomrubrique']);
  10. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  11. $nomrubrique2 = utf8_encode($nomrubrique);
  12. $nomssrubrique2 = utf8_encode($nomssrubrique);
  13. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  14. {
  15. print'
  16. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  17.  <a href="#">'.$nomrubrique2.'</a>
  18. </div>';
  19. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  20. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  21. {
  22. print'<div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">
  23.     <div class="sousmenu">
  24.     <a href="#">'.$nomssrubrique2.'</a>
  25.  </div>'; 
  26. }else{
  27. print'<div class="sousmenu">
  28.     <a href="#">'.$nomssrubrique2.'</a>
  29.  </div>'; 
  30.  }
  31. }
  32. print'</div>';
  33. mysql_close();
  34. ?>


Puis le résultat :
 
http://www.la-grange-sardieres.fr/ [...] tation.php
 
Merci

Reply

Marsh Posté le 21-10-2010 à 14:32:31    

dans la source de ta page, il y a bien toute les données.
cela doit venir du HTML...


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 21-10-2010 à 15:16:16    

Oui il y a toutes les données, mais la structure HTML de mon fichier PHP n'est pas bonne pour mon menu.
Celui-ci ne fonctionne pas comme je veux.
 
Je fais plein de tests, mais en vain...:(
 
Voici mon nouveau code :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique" ) or die ("impossible d'effectuer la requête" );
  4. $arrayFlag = array();
  5. print'<div id="menu">';
  6. while($shopone = mysql_fetch_array($req)){
  7. $nomrubrique = stripslashes($shopone['nomrubrique']);
  8. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  9. $nomrubrique2 = utf8_encode($nomrubrique);
  10. $nomssrubrique2 = utf8_encode($nomssrubrique);
  11. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  12. {
  13. print'
  14. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  15.  <a href="#">'.$nomrubrique2.'</a>
  16. </div>
  17. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  18. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  19. print'
  20.     <div class="sousmenu">
  21.     <a href="#">'.$nomssrubrique2.'</a>
  22.  </div>'; 
  23. }
  24. print'</div>';
  25. mysql_close();
  26. ?>


 
Le résultat est toujours sur la même page.
 
Serais-tu d'où pourrait provenir le problème ?
 
merci

Reply

Marsh Posté le 22-10-2010 à 11:40:50    

il faut que tu retravaille ce bout de code :

Code :
  1. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  2. {
  3. print'
  4. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  5. <a href="#">'.$nomrubrique2.'</a>
  6. </div>
  7. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  8. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  9. print'
  10.      <div class="sousmenu">
  11.      <a href="#">'.$nomssrubrique2.'</a>
  12.   </div>';
  13. }


 
Edit : dans la boucle tu vérifie si le menu est déjà inscrit, mais .... trouve la suite ;)


Message édité par stef_dobermann le 22-10-2010 à 11:42:44

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 22-10-2010 à 11:40:50   

Reply

Marsh Posté le 22-10-2010 à 14:02:38    

J'ai changé pas mal de chose depuis hier, mais si tu veux toujours m'aider j'ai encore des soucis :(
 
Merci et bonne journée

Reply

Marsh Posté le 22-10-2010 à 16:02:40    

envoi les modifications...


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 22-10-2010 à 21:01:31    

Bonsoir,
j'ai fait pas mal de modifications.
 
Voici le code de la page "presentation.php" :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" "/>
  7. <meta name="description" content=" "/>
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.  <link rel="stylesheet" href="css/style_menu.css" type="text/css" />
  11.  <script type="text/javascript" src="js/functions.js"></script>
  12. <style type="text/css">
  13. <!--
  14. body {
  15. margin-top: 0px;
  16. }
  17. -->
  18. </style></head>
  19. <body bgcolor="#333333">
  20. <table width="1050" border="0" align="center" cellpadding="0" cellspacing="0" style="background: #000; height: 421px; min-height: 421px;">
  21. <tr>
  22. <td colspan="3" style="height: 50px; min-height: 50px; max-height: 50px;">&nbsp;</td>
  23. </tr>
  24. <tr>
  25. <td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>
  26. <td width="850" style="width: 682px; background: #fff;">contenu</td>
  27. <td width="17" style="background: #000;">&nbsp;</td>
  28. </tr>
  29. </table>
  30. </body>
  31. </html>


 
Voici le code du CSS :
 

Code :
  1. #menu {
  2. width: 150px;
  3. background: #000;
  4. margin: 0;
  5. }
  6. .menu_niv2 { display: none; }
  7. .menu_niv1 a {
  8. display: block;
  9. background: #333;
  10. color: #fff;
  11. text-decoration: none;
  12. text-align: center;
  13. }
  14. .menu_niv1 a:hover {
  15. display: block;
  16. background: #666;
  17. color: #fff;
  18. text-decoration: underline;
  19. text-align: center;
  20. }
  21. .menu_niv2 a {
  22. color: #333;
  23. background: #ccc;
  24. text-decoration: none;
  25. text-align: center;
  26. display: block;
  27. }
  28. .menu_niv2 a:hover {
  29. color: #333;
  30. background: #aaa;
  31. text-decoration: underline;
  32. text-align: center;
  33. display: block;
  34. }


 
Voici le code du js :
 

Code :
  1. function afficheMenu(menu) {
  2. // generation du nom du sous menu que l'on veut gerer (afficher / cacher)
  3. var sousMenu='sous' + menu;
  4. // on recupere son etat
  5. var etatSousMenu=document.getElementById(sousMenu).style.display;
  6. // on cree un array de tous les menus de niveau 1, donc ceux qui ont la classe 'menu_niv1'
  7. var listeNiv1=document.getElementsByClassName('menu_niv1');
  8. // on boucle sur ces elements
  9. for (var i=0; i<listeNiv1.length; i++) {
  10. // on recupere l'id du menu courant
  11. var idCourant=listeNiv1[i].id;
  12. // si l'id courant est le meme que le menu que l'on a clique alors on traite le sous menu
  13. // sinon on le cache et on passe au suivant
  14. if (idCourant==menu) {
  15. if (etatSousMenu=='block') {
  16. document.getElementById(sousMenu).style.display='none';
  17. } else {
  18. document.getElementById(sousMenu).style.display='block';
  19. }
  20. } else {
  21. // attention, si on cache, on doit cacher le sous menu du menu courant, il faut donc creer une nouvelle variable pour cacher celui-ci
  22. var sousMenuTemp='sous' + idCourant;
  23. document.getElementById(sousMenuTemp).style.display='none';
  24. }
  25. }
  26. }


 
Et, enfin le code du menu :
 

Code :
  1. <div id="menu">
  2. <?php
  3. require("identification/connexion_sql.php" );
  4. // on attaque le php ici
  5. // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  6. $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête" );
  7. $rep1 = mysql_query($req1);
  8. while($row1 = mysql_fetch_array($rep1)) {
  9. // on affiche le menu de niveau 1
  10. echo "<div class=\"menu_niv1\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this.id)\"><a href=\"#\">".$row1['lib_menu']."</a></div>\n";
  11. // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
  12. $req2="SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu']."' ORDER BY ordre_menu"  or die ("impossible d'effectuer la requête" );
  13. $rep2=mysql_query($req2);
  14. $nb2=mysql_num_rows($rep2);
  15. if (isset($nb2) && $nb2>0) {
  16. echo "<div id=\"sousmenu".$row1['id_menu']."\" class=\"menu_niv2\">\n";
  17. while ($row2=mysql_fetch_array($rep2)) {
  18. echo "<a href=\"#\">".htmlentities($row2['lib_menu'])."</a>\n";
  19. }
  20. echo "</div>\n";
  21. }
  22. }
  23. ?>
  24. </div>


 
le premier problème est le décalage du menu par rapport à la zone blanche.
Normalement, le menu doit être à la même hauteur que la zone blanche, mais ce n'est pas le cas :(
Je ne comprends pas pourquoi il y a ce problème.
 
Autre problème, le menu ne fonctionne pas du tout sous IE.
 
Penses-tu pouvoir m'aider ?
 
Merci beaucoup et bonne soirée

Reply

Marsh Posté le 22-10-2010 à 21:44:05    

Citation :

le premier problème est le décalage du menu par rapport à la zone blanche.
Normalement, le menu doit être à la même hauteur que la zone blanche, mais ce n'est pas le cas :(
Je ne comprends pas pourquoi il y a ce problème.


pour faire une mise forme correct on passe par des CSS et non des tableaux
 

Citation :

Autre problème, le menu ne fonctionne pas du tout sous IE.


 
ça il faut voir du côté de JavaScript et prévoir le navigateur car chaque navigateur IE et mozilla entre autre n'ont pas les même propriété pour faire une chose.
 

Citation :

Penses-tu pouvoir m'aider ?


 
oui mais je ne fais pas tous...
 
la seule qui m'interrese dans un premier temps c'est que tu comprenne ce que tu fais, et je pense que pour l'instant tu ne sais pas ce que tu fais.
tu es partis sur un autre code alors qu'il n'y pas besoin, il faut juste que tu réfléchisse.
 
relit les ancien poste je t'apporte une solution.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 22-10-2010 à 22:13:03    

Citation :

pour faire une mise forme correct on passe par des CSS et non des tableaux


 
Oui, mais comme étant débutant, j'utilise les tableaux.
 

Citation :

ça il faut voir du côté de JavaScript et prévoir le navigateur car chaque navigateur IE et mozilla entre autre n'ont pas les même propriété pour faire une chose.


 
Et comment faire pour corriger ce bug ??
 

Citation :

oui mais je ne fais pas tous...
 
la seule qui m'interrese dans un premier temps c'est que tu comprenne ce que tu fais, et je pense que pour l'instant tu ne sais pas ce que tu fais.
tu es partis sur un autre code alors qu'il n'y pas besoin, il faut juste que tu réfléchisse.
 
relit les ancien poste je t'apporte une solution.


 
Si je sais ce que je fais, mais les problèmes persistent et je ne trouve pas les solutions.

Reply

Marsh Posté le 24-10-2010 à 14:42:23    

pourtant ce code n'est pas fini :

Code :
  1. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  2. {
  3. print'
  4. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  5. <a href="#">'.$nomrubrique2.'</a>
  6. </div>
  7. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  8. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  9. print'
  10.      <div class="sousmenu">
  11.      <a href="#">'.$nomssrubrique2.'</a>
  12.   </div>';
  13. }


 
si le champ n'est pas déjà affiché ...
sinon :??: donc s'il n'est pas affiché tu fais rien ...
donc -> eurêka


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-10-2010 à 15:08:20    

J'ai changé le code,  
je suis revenu au code de l'exemple que j'avais donné.
 
Voici les données :
 
HTML
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" "/>
  7. <meta name="description" content=" "/>
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.  <link rel="stylesheet" href="css/copie_style_menu.css" type="text/css" />
  11.  <script type="text/javascript" src="js/copie_functions.js"></script>
  12. <style type="text/css">
  13. <!--
  14. body {
  15. margin-top: 0px;
  16. }
  17. -->
  18. </style></head>
  19. <body bgcolor="#333333">
  20. <table width="1050" border="0" align="center" cellpadding="0" cellspacing="0" style="background: #000; height: 421px; min-height: 421px;">
  21. <tr>
  22. <td colspan="3" style="height: 50px; min-height: 50px; max-height: 50px;"></td>
  23. </tr>
  24. <tr>
  25. <td width="183" valign="top"><?php include("menu/copie_menu.php" ) ?></td>
  26. <td width="800" valign="top" style="width: 665px; background: #fff;">contenu</td>
  27. <td width="17" style="background: #000;">&nbsp;</td>
  28. </tr>
  29. </table>
  30. </body>
  31. </html>


 
CSS appelé
 

Code :
  1. #menu{
  2. width:150px;
  3. //margin-top: -26px;
  4. }
  5. .menu, .sousmenu{
  6. text-align: right;
  7. }
  8. .menu{
  9. height:18px;
  10. width:150px;
  11. color:#fff;
  12. padding-bottom: 10px;
  13. top:0;
  14. font-family:arial,sans-serif;
  15. font-size:12px;
  16. text-decoration:none;
  17. }
  18. .sousmenu{
  19. height:14px;
  20. width:170px;
  21. padding: 0px;
  22. color:#ffffff;
  23. text-align: right;
  24. }
  25. .menu a{
  26. display:block;
  27. width:100%;
  28. height:100%;
  29. color:#fff;
  30. font-family:arial,sans-serif;
  31. font-size:12px;
  32. text-decoration:none;
  33. margin-top: 0;
  34. }
  35. .sousmenu a{
  36. display:block;
  37. width:100%;
  38. height:100%;
  39. color:#666666;
  40. font-family:Garamond;
  41. font-size:18px;
  42. text-decoration:none;
  43. }
  44. .sousmenu a:hover, .sousmenu a:active, .sousmenu a:focus{
  45. color:#ffffff;
  46. }


 
javascript du menu de gauche
 

Code :
  1. function afficheMenu(obj){
  2. var idMenu     = obj.id;
  3. var idSousMenu = 'sous' + idMenu;
  4. var sousMenu   = document.getElementById(idSousMenu);
  5. /*****************************************************/
  6. /** on cache tous les sous-menus pour n'afficher    **/
  7. /** que celui dont le menu correspondant est cliqué **/
  8. /** où 4 correspond au nombre de sous-menus         **/
  9. /*****************************************************/
  10. for(var i = 1; i <= 5; i++){
  11.  if(document.getElementById('sousmenu' + i) && document.getElementById('sousmenu' + i) != sousMenu){
  12.   document.getElementById('sousmenu' + i).style.display = "none";
  13.  }
  14. }
  15. if(sousMenu){
  16.  //alert(sousMenu.style.display);
  17.  if(sousMenu.style.display == "block" ){
  18.   sousMenu.style.display = "none";
  19.  }
  20.  else{
  21.   sousMenu.style.display = "block";
  22.  }
  23. }
  24. }


 
PHP du menu
 

Code :
  1. <div id="menu">
  2. <?php
  3. require("identification/connexion_sql.php" );
  4. // on attaque le php ici
  5. // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  6. $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête" );
  7. $rep1 = mysql_query($req1);
  8. while($row1 = mysql_fetch_array($rep1)) {
  9. // on affiche le menu de niveau 1
  10. echo "<div class=\"menu\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this)\"><a href=\"#\">".$row1['lib_menu']."</a></div><br>\n";
  11. // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
  12. $req2="SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu']."' ORDER BY ordre_menu"  or die ("impossible d'effectuer la requête" );
  13. $rep2=mysql_query($req2);
  14. $nb2=mysql_num_rows($rep2);
  15. if (isset($nb2) && $nb2>0) {
  16. echo "<div id=\"sousmenu".$row1['id_menu']."\" style=\"display:none\"><br>\n";
  17. while ($row2=mysql_fetch_array($rep2)) {
  18. echo "<div class=\"sousmenu\"><a href=\"#\">".htmlentities($row2['lib_menu'])."</a></div><br>\n";
  19. }
  20. echo "</div>\n";
  21. }
  22. }
  23. ?>
  24. </div>


 
 
Le résultat est visible ici :

Code :
  1. http://www.la-grange-sardieres.fr/ [...] ation2.php


 
Le problème de la marge est toujours présent par contre... :(
 

Reply

Marsh Posté le 24-10-2010 à 22:06:48    

il y a déjà du mieux ;)
mais je ne comprend ta 1ére requete SQL id_parent c'est qui ??


Message édité par stef_dobermann le 24-10-2010 à 22:11:34

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-10-2010 à 23:44:04    

id_parent c'est l'id des menus et sous-menus.
 
L'id_parent 0 correspond aux menus et l'id_parent 1 aux sous-menus.

Reply

Marsh Posté le 24-10-2010 à 23:46:05    

plus aucune correspondance avec la table MySQL que tu as mis en deuxième poste : http://forum.hardware.fr/hfr/Progr [...] m#t2030670


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 25-10-2010 à 00:13:07    

Non, en effet j'ai tout modifié :
 
Voici la nouvelle table :
 
CREATE TABLE menus (id_menu INT not null AUTO_INCREMENT, lib_menu VARCHAR (100) NOT NULL, id_parent INT, image_menu VARCHAR (100), url_page VARCHAR (100), ordre_menu INT, PRIMARY KEY (id_menu));
 
 

Reply

Marsh Posté le 25-10-2010 à 10:03:05    

merci de tenir au courant...
j'en étais encore avec tes 2 tables ...
 
Edit : et le contenu de ta table, en partie ou entier comme tu sens


Message édité par stef_dobermann le 25-10-2010 à 10:03:47

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 25-10-2010 à 12:25:47    

désolé, mais j'essaie tellement de choses et comme le site doit être fini le plus rapidement possible, je ne peux pas toujours venir sur hardware.fr

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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