Page 1 sur 1

Menu en PHP

Posté : 12 févr. 2005, 22:45
par zouetchou
Bonjour,

J'essais de créer un script capable de reproduire l'aborecence d'un menu dont les rubriques sont issues d'une base de données. Mais mon problème ce sont les sous-rubriques d'une sous rubrique.

Quelqu'un pourrait-il m'indiquer ou trouver un script similaire ?
Car finalement pourquoi vouloir réinventer ce qui existe peut-être déjà ? :wink:

Merci

Posté : 12 févr. 2005, 23:25
par Xenon_54
Le moyen le plus optimisé de le faire est l'utilisation des "Nested Sets". Voici des explications très techniques sur leurs utilisations:
http://www.dbazine.com/tropashko4.shtml

Cependant, si tu peux te permettre un appel récursif générant une requête SQL par résursion, tu peux créer une fonction qui se charge d'aller chercher tous les enfants portant l'ID du noeud courant et ainsi parcourir tous ceux-ci.

Exemple

Code : Tout sélectionner

uid pid name 1 0 Section 1 2 0 Section 2 3 0 Section 3 4 1 Section 1.1 5 1 Section 1.2 6 1 Section 1.3 7 4 Section 1.1.1 8 4 Section 1.1.2 9 2 Section 2.1 10 2 Section 2.2
Fonction et requête non-optimisée
Ne comprend pas la gestion de l'arborescence avec espaces car je suis un peu pressé.
<?php
function node($pid=0) {

	$sql = 'SELECT uid, pid, name
	        FROM nodes
	        WHERE pid='.intval($pid);
	$res = mysql_query($sql) or die(mysql_error());

	if (FALSE != ($row = mysql_fetch_array($res))) {

		do {
			echo $row['name'] . '<br />';
			node($row['uid']);
		} while (FALSE != ($row = mysql_fetch_array($res)));
	}
}
?>

Arborescence résultat

Code : Tout sélectionner

Section 1 (1) Section 1.1 (4) Section 1.1.1 (7) Section 1.1.2 (8) Section 1.2 (5) Section 1.3 (6) Section 2 (2) Section 2.1 (9) Section 2.2 (10) Section 3 (3)
;)

Posté : 13 févr. 2005, 03:22
par Hubert Roksor
Argh non, pas ça! :lol: J'ai personnellement perdu quelques heures de sommeil sur cette série d'article (spécialement la partie "Tree encoding", à multiplier entre elles des matrices auxquelles je ne comprenais rien, pour finalement m'apercevoir qu'il n'y avait aucun moyen d'utiliser un index pour quoi que ce soit et que la théorie était à des années-lumière de la pratique. (ironique pour quelqu'un qui travaille pour le "Real World Performance group" chez Oracle... with all due respect)

Tout ça pour dire que je suis tombé presque par hasard sur un article sur le forum de Développez, qui explique très bien les Nested Sets: ICI. J'aprécie particulièrement la représentation sous forme de "tranches englobantes" qui est beaucoup plus accessible pour ceux qui découvrent que tout ce que j'avais pu voir auparavant.

Posté : 13 févr. 2005, 05:56
par Xenon_54
Hubert Roksor
Génial, je bookmark!