ユーザーのハードドライブ全体のフォルダー選択を提示する必要があります(スクリプトはユーザー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スクリプトを実行すると、魅力のように機能します。ネストされたフォルダがたくさんある(通常)ハードドライブの場合、数分続きます。
フォルダーを一覧表示するためのより良い方法や、サーバー側のフォルダー作成ダイアログを表示するための完全に異なるソリューションを知っている人はいますか?