[Conception] Génération d'un menu HTML multi-niveaux (indéfini)
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 :
Code:
1 2 3 4 5 6
| ID - PID - MENU
1 - NULL - jaune
2 - 1 - vert
3 - NULL - bleu
4 - 2 - rose
5 - 4 - violet |
Mon menu devra ressembler à ceci :
Code:
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) |
J'espère que mon mini-schéma est clair...
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..
Code:
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;
} |
(le "echo " - ssmenu<br/>";" est juste un test)
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.