TreeView à partir d'une BDD

Mammouth du PHP | 1353 Messages

18 nov. 2008, 13:25

Bonjour,

J'ai besoin de devélopper un module mais je n'arrive pas à le formaliser (même sur papier).
L'idée est la suivante : j'ai une liste de site hierarchisés (parent - enfant - sous enfant - ...) et un certain nombre d'utilisateurs.
Le but est de créer un tree view personnalisé par utilisateur qui affiche a chacun les site auxquels ils ont le droit et organisés

Exemple pour user1 :
Site1
--- Enfant1_1
--------- Enfant2_1
--- Enfant1_2
Site2
--- Enfant2_1
...

Et donc l'affichage serait différent pour chaque user en fonction de ses droits.

Pour cela j'ai modélisé une table site (Id, Nom du site, Id_Parent) et une table users (user_id, site_id) dans laquelle je compte mettre une entrée a chaque fois qu'un utilisateur a les droits.

Déjà je ne suis pas sur que cela soit une bonne (ou la meilleure) idée, mais surtout si je fais ca mon probleme se pose dans le cas suivant :

Pour construire l'arbre je me dis que je récupère tous les sites auxquel le user a accès puis je crée l'arbre en fonction du parent, mais le probleme se pose :
si, dans mon exemple, le user a accès au site Enfant2_1 mais pas au site Enfant1_1 alors je n'aurai pas le parent dans mes résultat, donc je serai incapable de faire un arbre cohérent.

Mais sinon ma seule idée est de récupérer tous les sites, de générés l'arbre et de supprimer ceux auxquels le user n'a pas le droit et qui n'a pas de parent auquel il ait droit, ce qui me parait vraiment pas optimisé...

Désolé pour ce long poste et merci d avance pour vos suggestions.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 4674 Messages

18 nov. 2008, 20:17

Hey :),

Il me semble que Sékil' a écrit une classe pour manipuler les arbres intervallaires (arbres à 2 dimensions), très utile pour une base de données relationnelles. Il doit également y avoir des liens vers Développez.com etc. (sinon cherches par toi-même).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 1353 Messages

19 nov. 2008, 14:57

Merci.

En fait je cherche pas tellement le code, je voudrais plus des conseils sur la méthode, la facon de construire la base pour que cela soit au mieux et comment éviter le probleme des "enfants sans parent accessible" expliqué dans mon premier post.

J'aimerai visualiser le principe de fonctionnement, apres pour le code je le ferai moi meme car la c'est un exemple mais mes besoins sont plus spécifiques, mais je me dis que si j arrive à comprendre cela ca m aidera a avancer.

Je vais étudier le code que tu m as donné pour essayer de comprendre les bases, mais l'inverse me semble plus naturel ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 4674 Messages

19 nov. 2008, 19:16

Le code exploite ce qu'on appelle les arbres intervallaires (j'en ai parlé dans mon premier poste). Regarde sur Developpez.com, ils en parlent.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).