Page 1 sur 1

Fonction de menu avec niveau infini

Posté : 21 août 2006, 11:25
par Merlin82
Salut tout le monde,

Je dois créer une fonction de menu avec des niveaux infinis.

Ma table comporte les champs suivants:

`id` int(4) NOT NULL auto_increment,
`parent_id` int(4) NOT NULL default '0',
`node_name` varchar(255)',
`node_url` varchar(255)',

Par la suite, le menu se fait tout simplement. Tous les entrées ayant 0 sous parent_id sont affichés en premier niveau, pour les autres enregistrements, parent_id indique à quel sous menu l'enregistrement appartient. ;-)

Voilà 2 jours que je travaille dessus !!! (grrr d'ailleur mon boss s'impatiente... lol )
et je reste bloqué au niveau 2, je n'arrive pas à aller plus loin......... !

Si quelqu'un a déjà programmer une fonction de ce type, ou peut me donner des infos, je suis preneur à 300% ! lol

merci 1000 fois et un p'tit bonjour de Suisse à tout le monde.

Merlin

Posté : 21 août 2006, 11:27
par Rei Itchido
Quel niveau 2?
Qu'as-tu reussi à faire jusqu'ici?

Posté : 21 août 2006, 11:31
par Tictac
Ta table est insuffisante car tu va devoir connaitre le niveau ainsi que le menu au quel correspond le sous menu.

je dirais donc =>

`id` int(4) NOT NULL auto_increment,
`parent_id` int(4) NOT NULL default '0',
`level` int(4) NOT NULL default '0',
`node_name` varchar(255)',
`node_url` varchar(255)',

de cette manière tu peux créer un menu qui a comme référence le parent 0 et un niveau 5 ou 6 , ect ainsi de suite pour chaque menu ;)

Posté : 21 août 2006, 11:34
par Merlin82
Salut,
Par exemple, admettons qu'on ait les enregistrements suivants;

Code : Tout sélectionner

ID Parent_id Nom 1 0 Accueil 2 0 Magasin 3 0 Contact 4 2 Suisse 5 2 France 6 4 Lausanne 7 4 Genève 8 4 Zurich 9 2 Paris 10 2 Marseille
J'ai essayé en faisant deux fonctions différentes:

du style:
function menu($result,$article,$param) {
while ($row  =  mysql_fetch_array($result,MYSQL_NUM)) {
	echo $row[2]."<br>";
	ssmenu($row[0]);
	}
}
et une du style:
function ssmenu($id) {
$espace = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
$result = mysql_query("SELECT * FROM menu WHERE parent_id = $id");
while ($row  =  mysql_fetch_array($result,MYSQL_NUM)) {
	echo $espace.$row[2]."<br>";
	do {
	$resultss = mysql_query("SELECT * FROM menu WHERE parent_id = $row[0]");
	$nb = mysql_num_rows($resultss);
	while ($row  =  mysql_fetch_array($resultss,MYSQL_NUM)) {
	ssmenu($rowss[0]);
	}
	break;
	} while ($nb >0);
	}
}
Franchement, je suis paumé, je sais pas comment continuer.

T'as une idée?

Posté : 21 août 2006, 11:50
par aelurus
Salut je souhaite aussi faire un truc dans le genre.
Mais je pensais plus a faire comme avec les dossiers mais en remplacant tout les fonction relatif au dossier par des requettes sql et adapter les if en fonction des requettes.Avec un shema bloquer (nombre de sous-rep definie) sa vas mais pour un nombre indefinie je bloque au niveau structure de la base avec les liaisons logiques de la chose....

Posté : 21 août 2006, 13:26
par Tictac
je pense que la solution que j'ai donné doit vous mettre sur la voie !!

Posté : 21 août 2006, 13:35
par aelurus
Oui tout a fait mais j'en suis encore a la charte graphique moi :)

Posté : 21 août 2006, 13:46
par Merlin82
Merci TicTac, je vais tester cette possibilité.
Merci du coup de pouce