0

ユーザーのハードドライブ全体のフォルダー選択を提示する必要があります(スクリプトはユーザーPCで実行されます)。そのリストから、ユーザーは1つ以上のフォルダーを選択できます。プレゼンテーションにjqueryライブラリdynatree(http://code.google.com/p/dynatree/)を使用しています。

私のスクリプトは次のように機能します。

1.指定したドライブ文字またはパスのすべてのフォルダーを一覧表示し、次の再帰関数を使用してDynatreeで読み取り可能な形式に解析します。

コード:

function getDirectory( $path = '.', $level = 0, $id = 0){ 
$ignore = array( 'cgi-bin', '.', '..' , 'windows', 'user_folders', 'user_profiles'); 
$dh = @opendir( $path ); 
$zaehl = 0; 
if($level != 0) echo(', children: [ ');
while( false !== ( $file = readdir( $dh ))){ 
$zaehl++;
      if( !in_array( strtolower($file), $ignore ) ){ 
        $spaces = str_repeat( ' ', ( $level * 4 ) ); 
        if( is_dir( "$path/$file" ) ){
        echo('{title: "'.$file.'", isFolder: true, key: "'.$path.'/'.$file.'"');
    echo("\n"); 
            getDirectory( "$path/$file", ($level+1), $id.'.'.$zaehl); 
    echo('},');
    echo("\n");

        }       

    } 

} 
 if($level != 0)
    {
        echo(']');
    }
closedir( $dh ); 
} 

2.Dynatreeを使用してリストを提示します。

        $("#tree3").dynatree({

        checkbox: true,

        selectMode: 3,

        children: treeData,

        onSelect: function(select, node) {

            var selKeys = $.map(node.tree.getSelectedNodes(), function(node){

                return node.data.key;

            });
            var selRootNodes = node.tree.getSelectedNodes(true);
            var selRootKeys = $.map(selRootNodes, function(node){
                return node.data.key;
            });
            $("#echoSelectionRootKeys3").text(selRootKeys.join(", "));
            $("#echoSelectionRoots3").text(selRootNodes.join(", "));
        },
        onDblClick: function(node, event) {
            node.toggleSelect();
        },
        onKeydown: function(node, event) {
            if( event.which == 32 ) {
                node.toggleSelect();
                return false;
            }
        }
    });

基本的にクリエイターのチュートリアルからコピーしたので、プロセス番号2が問題になるとは思いません。プロセス1でフォルダの一覧表示を間違えたと思います。

いくつかのフォルダを持つハードドライブのパラメータを使用してgetDirectoryスクリプトを実行すると、魅力のように機能します。ネストされたフォルダがたくさんある(通常)ハードドライブの場合、数分続きます。

フォルダーを一覧表示するためのより良い方法や、サーバー側のフォルダー作成ダイアログを表示するための完全に異なるソリューションを知っている人はいますか?

4

2 に答える 2

0

まったく異なるアプローチは、特定のフォルダーのコンテンツのみを取得するためにPHPを使用することです(再帰はありません)。AJAXを使用して再帰を実行し、ディレクトリ構造をより深く参照する場合は、それを並行して実行できます。

これで速度が劇的に上がると思います。さらに、データが完成していなくても、すぐに誰もが喜んでデータを見ることができるものをすでに表示できます。

于 2012-04-16T16:58:33.330 に答える
0

速度に不満がある場合は、Lazy Loadingをお勧めします。ディレクトリ内のすべてのフォルダー/ファイルをロードすると、非常に遅くなります。

于 2012-04-18T12:44:08.863 に答える