2012-04-16 3 views
0

사용자의 전체 하드 드라이브에 대한 폴더 선택을 제시해야합니다 (스크립트는 사용자 PC에서 실행 됨). 이 목록에서 사용자는 하나 이상의 폴더를 선택할 수 있습니다. 프리젠 테이션을 위해 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; 
      } 
     } 
    }); 

내가 생을하지는 nk 프로세스 번호 2는 문제입니다. 기본적으로 제작자 자습서에서 복사했습니다. 폴더를 나열하는 동안 프로세스 1에서 실수를 저질렀다고 생각합니다.

몇 개의 폴더가있는 하드 드라이브 매개 변수로 getDirectory 스크립트를 실행하면 매력처럼 작동합니다. 중첩 된 폴더가 많은 (일반적으로) 하드 드라이브의 경우 몇 분 정도 지속됩니다.

누구나 폴더를 나열하는 더 좋은 방법이나 서버 측 폴더 만들기 대화 상자를 표시하는 완전한 해결책을 알고 있습니까?

답변

0

속도와 관련하여 불만을 제기하는 경우 Lazy Loading을 제안합니다. 디렉토리에있는 모든 폴더/파일을로드하는 경우 속도가 매우 느려집니다.

0

완전히 다른 접근법은 PHP를 사용하여 특정 폴더의 내용 만 가져 오는 것입니다 (재귀 없음). AJAX를 사용하여 재귀를 수행하고 디렉토리 구조를 더 자세히 살펴본다면 병렬로 수행 할 수 있습니다.

나는 이것이 속도를 극적으로 증가시킬 것이라고 생각한다. 또한 완료되지 않은 경우에도 모든 사람이 곧 데이터를 볼 수있게되어 기쁘게 될 무언가를 보여줄 수 있습니다.