Page 1 sur 1
menu à hiérarchie illimitée
Posté : 27 avr. 2007, 10:13
par mcorgnet
Bonjour,
J'ai besoin de créer un menu dynamique, sans limite de hiérarchie.
Dans ma base de données, il est représenté à peu près ainsi :
menus (ID, libelle, parentId)
ou parentId fait référence à l'Id de la même table.
Mon problème, c'est de traiter tout ça en php, et pouvoir le représenter graphiquement ...
Je sèche un peu sur la manière de m'y prendre, en fait.
Vous auriez quelques pistes pour moi ?.
Merci de votre aide.
Posté : 27 avr. 2007, 11:33
par mcorgnet
Je suis passé sur cet article :
http://sqlpro.developpez.com/cours/arborescence/
Je n'ai absolument rien compris.
A priori, ça résoudrait mon problème, mais j'ai envie de dire que franchement, c'est incompréhensible ...
quelqu'un pourrait m'expliquer ça ?
Posté : 27 avr. 2007, 23:24
par Xenon_54
Le but est de classer tous tes items de 1 à n
Ensuite, la requête crée les "ranges", c'est à dire à partir de quand un sous-noeud commence et se termine.
Personnellement, si ton site n'est pas trop fréquenté, je te recommende (à contre coeur) d'utiliser la notion de "noeud parent". En gros, tu crées un champ "parent" qui contiendra l'ID de ton noeud parent. (0 étant la racine)
Tu parcours donc ta table en partant de 0. Ensuite tu crées une fonction récursive qui fera un SELECT sur tous les noeuds qui contiendra l'ID de ton noeud comme parent.
Exemple informel:
Code : Tout sélectionner
fonction affichage_noeud(noeud_parent)
debut
resultats = selectionne noeud qui ont comme parent "noeud_parent"
si nombre resultats n'est pas 0 alors
debut
boucle sur resultats
debut
affichage du noeud_courant
affichage_noeud(noeud_courant)
fin
fin
fin
affichage_noeud(0)
Donc en gros, tu appelles la fonction affichage_noeud tant qu'il y a des noeuds qui sont enfants de ton noeud. Tu commences le tout en appelant la fonction en sélectionnant tous les noeuds qui ont le noeud_parent 0
Posté : 16 mai 2007, 11:45
par mcorgnet
Bonjour,
merci de ta réponse.
Je vais étudier ta solution, c'est celle que j'envisageais, je ne savais juste pas comment m'y prendre.
Néanmoins, j'aurais apprécié de comprendre cet article de chez developpez.com, histoire de ...
Le site n'est pas très fréquenté, mais comme c'est une application intranet, beaucoup de requêtes sont exécutées. Sur certaines pages, j'ai des requêtes qui font jusqu'à 60 lignes, pour renvoyer des statistiques assez lourdes.
Donc si je peux éviter de multiplier les requêtes, et les boucles, je ne suis pas contre ...
Merci de ton aide.
Posté : 16 mai 2007, 14:41
par Xenon_54
Tu peux cacher les résultats, donc créer un fichier .html de cache avec ton menu généré. (si c'est un menu)
Posté : 17 mai 2007, 21:27
par dogmongo
salut
c'est pour faire quoi exactement ?
Posté : 17 mai 2007, 22:11
par Klomac
La récursivité, comme ça a été dit (c'est à dire faire appel à la fonction à l'intérieur même de cette fonction).
A noter que la librairie SPL de PHP5 permet de faire ce genre de choses de manière très pratique avec l'interface RecursiveIterator. A noter même que pour le cas de la représentation graphique de l'arborescence des fichiers de ton ftp c'est géré nativement par des classes de PHP5 (quasiment), c'est franchement tout simple. Pour ton cas c'est un peu plus compliqué, faut implémenter ta propre classe mais ça se fait.
Si t'es intéressé tu peux m'ajouter sur MSN j'ai un ebook sympa qui parle de ça
