Page 1 sur 1

Interface gestion Dossier-Sous dossier

Posté : 09 août 2008, 09:45
par Ducati
Bonjour à tous,

Je travaille actuellement sur un site internet et je voudrai créer une interface de gestion. Je m'explique. L'utilisateur entre des données 'url en l'occurence' qui entrent dans une base de donnée. Mon objectif est de permettre à cet utilisateur de 'ranger' ces urls en créant dossier et sous dossier tant qu'il le souhaite. Cependant je n'ai aucune idée de comment réaliser cela, alors je vous demande si vous avez des idées sur quoi je dois m'orienter pour réaliser un tel script.

Merci d'avance

Posté : 09 août 2008, 09:51
par jojolapine
Bonjour,
Il faut à mon avis créer une table SQL contenant tout les dossiers, d'une structure telle que

Code : Tout sélectionner

table dossier: int id_dossier varchar nom_dossier ... etc ... int id_dossier_parent
Ainsi les dossiers les plus haut, n'ont pas de parents, donc id_dossier_parent est à 0 (ou null...), sinon on peut retrouver le "père" de chaque dossier...
Ensuite pour les urls, c'est plus facile, une table

Code : Tout sélectionner

table urls: int id_url ... etc ... int id_dossier_conteneur
Voilou fait des essais de tables, de requêtes pour voir si ça te convient, si tu comprend ce modèle...

Posté : 09 août 2008, 10:01
par Ducati
Oui je comprend ton modèle, je vais tenter de réaliser un script sur ce modèle. Par contre je ne comprend pas trés bien ta ligne id_dossier_conteneur. Pour moi l'url séléctionnée appartient à un dossier dit "père" et ensuite suivant ton modèle a pour indice 1,2,3 suivant sa hiérarchie dans les sous dossiers non ?

Posté : 09 août 2008, 10:25
par jojolapine
Alors,
Non, en fait une url appartient à un dossier (pour l'instant on ne sait pas si c'est un sous sous sous dossier, ou si c'est le dossier maitre...)
Et ensuite, c'est dans la table dossier que l'on apprend l'emplacement du dossier
exemple:
table dossier

Code : Tout sélectionner

id_dossier | nom_dossier | id_dossier_parent 1 | leplushaut | 0 2 | idem | 0 3 | sousdossier | 2 4 | soussous | 3
ce qui donne en arborescence:

Code : Tout sélectionner

/leplushaut /idem /sousdossier /soussous
ensuite ta table urls:

Code : Tout sélectionner

id_url | nom_url | id_conteneur 1 | un | 1 2 | deux | 1 3 | trois | 4 4 | quatre | 3 5 | cinq | 2
ce qui donne au final:[/code]
ce qui donne en arborescence:

Code : Tout sélectionner

/leplushaut un deux /idem /sousdossier /soussous trois quatre cinq
Est-ce que c'est plus compréhensible?

Posté : 09 août 2008, 11:08
par Ducati
Oui merci beaucoup je vais essayer de travailler avec ce modèle qui me semble le plus pratique. Merci de ton aide quand j'aurai codé certains trucs je pourrai les exposer ici


Edit : J'ai commencé à travailler avec le modèle que tu m'as montré et j'ai du mal a élaboré un script qui afficherait l'arborescence. Le problème principal est que je ne vois pas le moyen de connaitre le nombre de sous dossier à un dossier propre. ex :
<?
			//retourne la totalité de la table
			$query = "(SELECT * INTO dossier)" or die('MySQL error: '.mysql_error());
			$result = mysql_fetch_array(mysql_query($query));
			
			//nombre de dossiers et sous dossiers
			$query2 = "(SELECT id_dossier INTO dossier)" or die('MySQL error: '.mysql_error());
			$nb = mysql_num_rows(mysql_query($query2));
			
			for($cpt=1;$cpt<=nb;$cpt++)
			{
                                    //ici on afficherai le dossier parent
			echo'<option value=""></option>';

			//ici on crée une autre boucle qui gèrerait les sous dossiers au niveau 1, puis ainsi dessuite
			
			}
			
			
			
			
          	echo'<option value=""> </option>';

Voilà merci d'avance

Posté : 09 août 2008, 14:22
par Sékiltoyai
Attention, bien lire ceci, à savoir que la solution qui t'a été proposée est intéressante mais vite limitée. Pour des arbres importants, cela peut être très couteux en ressources car tu ne peux pas optimiser l'accès aux données…

Posté : 09 août 2008, 14:48
par Ducati
Je viens de lire ton article vraimnt interressant, en fait ça va me prendre plus de temps que prévu mais pour le moment je trouve la technique plus simple d'emploi que les requete lourde et longue

Posté : 09 août 2008, 14:49
par jojolapine
:oops: Dsl pour mes bétises...

Posté : 09 août 2008, 15:21
par Ducati
Nan du tout, grace à vous deux je comprend mieux comment faire pour créer un tableau avec arborescence. Cependant j'aurai une question à poser à Sekiltoyai : Je ne comprend pas comment on insère un élément dans la base de donné. Je m'explique, dans votre exemple vous avez définit un titre maitre sur tout les autres ---> "transport" peut-on en avoir un autre ? et dans l'exemple l'élément est définit de 1 à 41 je crois, je ne vois pas trés bien comment faire pour que tout ça devienne automatique

Posté : 09 août 2008, 16:45
par Sékiltoyai
C'est un arbre, il n'y a qu'une seule racine. S'il faut plusieurs éléments au même niveau, c'est qu'il faut une racine au dessus.
Mais si cela te pose vraiment problème, tu peux utiliser un champ tree_id qui te différencie plusieurs arbres distincts (tu fais alors ta requête sur un arbre précis en précisant le bon tree_id dans la clause WHERE).

Pour l'insertion d'un noeud, il "suffit" de décaler tous les noeuds au dessus du noeud que tu ajoutes de 2 vers la droite. Tu peux regarder les requêtes que je fais à l'insertion et à la délétion ici.


Pour plus d'infos : http://sqlpro.developpez.com/cours/arborescence/