Aller au contenu

Représentation d'arborescence en PHP depuis MySQL


Guest stone

Sujets conseillés

Guest stone

salut,

voilà j'utilise une représentation par intervalle pour représenter une arborescence de dossiers sur ma base de données :

Le lien vers un tutoriel de la représentation intervallaire de l'arborescence est ici

Tout ce passe bien et cette représentation me facilite grandement le travail.

Mon seul problème est de représenter mon arborescence depuis la racine, par exemple :

racine

----élémentfils

--------elementfils

--------elementfils

----------------elementfils

----élémentfils

--------elementfils

----élémentfils

Est-ce que quelqu'un a déjà été confronté à ce genre d'algo ??

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Oui, mais je ne le connaissais pas sous ce nom ... Je connaissais cette technique sous le nom de "Nested Sets" (Sets imbriqués, traduction sommaire). C'est à mon avis la plus "performante"

Personnellement j'ai utilisé cette collection de fonctions (ce n'est pas un class) PHP développée par un professeur suisse (si, si, je le dis parce que je suis suisse :P ) : http://www.edutech.ch/contribution/nstrees/index.php

J'ai pas mal modifié ces fonctions... déjà j'en ai fait une class ce qui facilite beaucoup son utilisation. Mais de base sans modifications elle marche très bien et comme je n'ai pas demandé l'accord de ce professeur je ne souhaite pas la poster ici, désolé.

Toutefois ton problème est réglé dans avec ceci, une fonction nommée "nstWalkPreorder" qui permet de parcourir l'arbre pas à pas et perme de connaître le niveau du noeud en cours et de créer ta liste avec par exemple :

echo str_repeat("-", $level*4)."<br/>\n";

Pour arriver au résultat que tu souhaites.

Par contre, j'ai planché quelques temps sur une solution "simple" pour utiliser des unordered list (<ul>, <li>, ...) HTML pour afficher une arborescence (nombre de niveaux illimité) et je n'ai pas de solution, si quelqu'un s'est confronté au même problème ou à une solution qu'il me fasse signe :)

*EDIT*

Petit complément, si tu as accès à PEAR sur ton serveur web, tu peux également utiliser ce module : http://pear.php.net/package/DB_NestedSet

Il fonctionne très bien, mais je n'ai malheureusement pas accès a PEAR en production :boude: donc je n'ai jamais testé pour des projet autre que des simples tests.

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Guest stone

Terrible, merci beaucoup :yoot: je venais de découvrir ce modèle de représentation et je n'avais pas d'idées sur la façon de le représenter. Encore merci.

sinon la librairie est sous licence GPL tu peux donc montrer ta classe à ceux qui en auront besoin :

License: the nstrees library is available under the terms fo the GNU public license GPL.

Je te remercie beaucoup pour ton aide :)

Lien vers le commentaire
Partager sur d’autres sites

Ouais...

je vais d'abord la proposer au professeur si ça l'intéresse, j'ai rajouté/modifié 2-3 fonctions genre Suppression d'un noeud en désimbriquant ses enfant (dans les fonctions de base les enfants étaient tous supprimé).

Et j'ai rajouté une bonne dose de commentaires, parce que s'était à peu près le desert de Gobi de ce côté là, dès que j'ai une réponse de sa part je viendrais poster des nouvelles ici :)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

j'ai reçu une réponse du créateur de cette librairie et il ne voit pas d'objection à la publication de "ma" class donc voilà :

http://www.hexadec.ch/hexalab/2006-06-01/3-nested-sets/

En espérant que cela vous sera utile, personnellement je m'en sers très souvent.

(J'ai essayé le [ codebox ] ... mais toute l'identation est "effacée" :S et le [ code ] est trop long )

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Bonsoir,

Effectivement le lien a changé depuis et je n'ai pas pensé à le mettre à jour ici. Merci pour ton courriel ;)

Voilà le nouveau lien : http://www.hexadec.ch/hexalab/2006-06-01/3-nested-sets/

Tu trouveras le lien de téléchargement dans l'article sur mon blog.

Bonne continuation et si tu y apportes des améliorations n'hésite pas à me le dire, je serai heureux de les découvrir :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...