2010-08-27 15 views
2

Im la construction d'un gestionnaire de fichiers qui permet aux utilisateurs de créer des dossiers dans les dossiers (dans les dossiers) pour stocker leurs fichiers. Je n'ai pas vraiment limité la profondeur des dossiers, mais je vais probablement en faire 10 ou quelque chose comme ça.dossier récursive liste dans un menu déroulant, en php

Comment pourrais-je énumérer tous les dossiers (dans une arborescence) dans le menu déroulant, comme ça?

/ 
/Folder 1 
/Folder 2 
    /Child of folder 2 
    /Child of child of folder 2 
    /Another Child of of folder 2 
/Folder 3 

(peut-être un peu plus joli).

J'utilise MySQL pour stocker les données de dossier

CREATE TABLE IF NOT EXISTS `folders` (
    `f_id` int(11) NOT NULL AUTO_INCREMENT, 
    `f_parent` int(11) NOT NULL, 
    `f_owner` int(11) NOT NULL, 
    `f_name` varchar(255) NOT NULL, 
    `f_desc` varchar(1000) NOT NULL, 
    `f_added` int(11) NOT NULL, 
    `f_files` int(11) NOT NULL, 
    `f_private` int(1) NOT NULL, 
    `f_password` varchar(255) NOT NULL, 
    PRIMARY KEY (`f_id`), 
    UNIQUE KEY `f_parent` (`f_parent`,`f_owner`,`f_name`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
+2

Je vous suggère de considérer une structure de données alternative. Voir http://dev.mysql.com/tech-resources/articles/hierarchical-data.html – Artefacto

+0

@Artefacto (et tout le monde à lire ce autre): Cet article est maintenant à http://mikehillyer.com/articles/managing- hiérarchique-données-dans-mysql /. –

Répondre

0

How could I list all the folders (in a tree structure) inside the drop down menu, like so?
Qu'est-ce qu'un "menu déroulant"? L'arbre sonne plus comme ça - > TreeView.

Il y a beaucoup implemenations d'un TreeView « contrôle » en Javascript, http://developer.yahoo.com/yui/treeview/ par exemple, et bien sûr, vous pouvez utiliser PHP pour l'alimenter avec des données.

1

pourquoi vous stocker des informations de dossier dans mysql lorsque vous pouvez utiliser la classe RecursiveIteratorIterator

$folder_path="PATH_TO_YOUR_FOLDER" 

$obj= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder_path), 
RecursiveIteratorIterator::SELF_FIRST); 

foreach($obj as $name => $val){ 
    echo "$name\n"; 
} 

il imprimera tous les répertoires et les fichiers dans le dossier donné si vous voulez imprimer seul nom de dossier, puis ajoutez cette condition

echo $folder (is_dir($name)) ?$name :""; 

pas besoin de dossier stocker les informations dans DB, sauf si vous avez un besoin spécifique pour stocker des informations dans le dossier DB

+0

J'ai une exigence spécifique où les dossiers ne peuvent pas être des dossiers réels sur le HD. –

0

J'ai trouvé cette ressource pour être d'une grande aide quand je voulais construire quelque chose comme ça:

http://abeautifulsite.net/blog/2008/03/jquery-file-tree/

La bonne chose à propos que la mise en œuvre ci-dessus est qu'il utilise le système de fichiers pour stocker des fichiers et la hiérarchie, cela ne fonctionnera pas pour les choses complexes, mais si votre application n'a pas besoin de beaucoup de choses, elle pourrait être la chose dont vous avez besoin.