Bonjour,
Mon titre n'est surement pas trés clair, donc j'ais essayé de vous faire comprendre au mieux mon souci :
J'ai une BDD avec une table "menu" où sont stockées les entrées du menu que je veux afficher sur ma page..
Dans cette table il y'a un champ parent_Id, qui contient l'id du menu parent si celui-ci en a un...
Avec un exemple ça ira peut-être mieux...
Si ma base est rempli comme-ceci :
Mon menu devra ressembler à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ID - PID - MENU 1 - NULL - jaune 2 - 1 - vert 3 - NULL - bleu 4 - 2 - rose 5 - 4 - violet
J'espère que mon mini-schéma est clair...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 * jaune (menu sans PID) vert (sous-menu de "jaune") -rose (sous-menu de "vert") --violet (sous-menu de "rose") * bleu (menu sans PID)
Donc mon souci ici c'est je ne connais pas à l'avance le nombre de 'niveaux' qu'il va y avoir pour une entrée du menu (j'peut trés bien me retrouvé avec un sous-sous-sous-sous-menu ...)
Le code suivant marche trés bien, mais seulement pour un seul sous-niveau..
(le "echo " - ssmenu<br/>";" est juste un test)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $querySelectMenu = $db->query("SELECT * FROM menu WHERE menu_parentId IS NULL"); while($rowMenu = $querySelectMenu->fetchRow()) $tableMenu[] = $rowMenu; foreach($tableMenu as $dataTableMenu){ $idMenu = $dataTableMenu['menu_id']; echo "* ".$dataTableMenu['menu_nom']."[$idMenu]<br />"; $querySelectSousMenu = $db->query("SELECT * FROM Menu WHERE menu_parentId = $idMenu"); while($rowSousMenu = $querySelectSousMenu->fetchRow()) $tableSousMenu[] = $rowSousMenu; foreach($tableSousMenu as $dataTableSousMenu){ $idMenu = $dataTableSousMenu['menu_id']; echo $dataTableSousMenu['menu_nom']."<br />"; if($db->query("SELECT * FROM menu WHERE menu_parentId = $idMenu")->numRows() > 0) { echo " - ssmenu<br/>"; } } $tableSousMenu = null; }
Ce que j'aimerais c'est un code qui puisse fonctionner indépedemmant du nombre de ss-niveaux présent dans la BDD.
Voilà n'hésitez pas si vous avez une idée ou si c'est pas clair...
merci.
Partager