Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/02/2007, 12h51   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2005
Messages : 62
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 62
Points : 10
Points : 10
Par défaut [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.
R'SKaP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 12h39   #2
Membre expérimenté
 
Étudiant
Inscription : mars 2006
Messages : 396
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2006
Messages : 396
Points : 500
Points : 500
Pour ne pas être limité par le nombre de sous-niveaux, il faut passer par une fonction récursive.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function menu($id, $level)
{
    global $db;
    $query = $db->query("SELECT * FROM menu WHERE menu_parentId=$id");
    while($rowMenu = $query->fetchRow())
    {
        echo str_repeat("-",$level);
        echo $rowMenu['menu_nom']."<br />";
        menu($rowMenu['menu_id'],$level+1);
    }
}
 
$query = $db->query("SELECT * FROM menu WHERE menu_parentId=$id");
while($rowMenu = $query->fetchRow())
{
    echo "* {$rowMenu['menu_nom']}<br />";
    menu($rowMenu['menu_id'],0);
}
jeremya est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h45.


 
 
 
 
Partenaires

Hébergement Web