2012-04-16 18 views
0

ユーザのハードドライブ全体のフォルダ選択を提示する必要があります(スクリプトはユーザpc上で実行されます)。このリストから、ユーザーは1つまたは複数のフォルダーを選択できます。私はjqueryライブラリのdynatree(http://code.google.com/p/dynatree/)を使ってプレゼンテーションを行っています。フォルダ選択ダイアログのパフォーマンス

私のスクリプトは次のように動作します。指定したドライブ文字またはパスのすべてのフォルダ

1.Listと、この再帰関数を経由して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.Present 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; 
      } 
     } 
    }); 

私はTHIをドント私は基本的にそれを作成者のチュートリアルからコピーしたので、プロセス番号2が問題です。私は、プロセス1の間にフォルダをリストしている間に間違いをしたと思います。

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

誰かがフォルダをリストする良い方法や、サーバー側のフォルダ作成ダイアログを表示する完全な別の解決法を知っていますか?

答えて

0

スピードについて不平を言うなら、私はLazy Loadingを提案します。ディレクトリ内のすべてのフォルダ/ファイルをロードすると、非常に遅くなります。

0

PHPを使用して特定のフォルダ(再帰なし)のコンテンツのみを取得する方法があります。 AJAXを使用して再帰を行い、ディレクトリ構造をより深く参照する場合は、それを並行して行うことができます。

私はこれがスピードを劇的に増加させると思います。さらに、完了していなくてもすぐに誰もがすぐにデータを見ることができるように、すでに何かを表示することができます。

関連する問題