[PHP-users 32078] Re: ファイルブラウザ
Tatsuhiko Kubo
cubicdaiya @ gmail.com
2007年 5月 6日 (日) 02:03:38 JST
こんばんは。cubicdaiyaです。
PEARにHTML_TreeMenuというのがあります。
http://pear.php.net/package/HTML_TreeMenu/
これを使うと、Windowsのエクスプローラ風のツリービューを作成することがで
きます。
使用例:http://cubicdaiya.no-ip.info/index.php?file=wiki_menu/catalog.tpl
指定したディレクトリ以下を再帰的に走査して、エントリを追加している点は同
じです。
上記のページでは、ディレクトリの場合は、createNodes関数を再帰的に呼出し
た後で、
その結果をHTML_TreeMenuオブジェクトに加えて、ファイルの場合は、
そのまま新しいHTML_TreeNodeをHTML_TreeMenuオブジェクトに加えています。
以下にサンプルコードを載せておきます。多分これで動くと思います。
createTree.php
<?php
require_once("HTML/TreeMenu.php");
/**
* 一覧をツリー表示
* @param string $root_path ルートディレクトリ
* @return string ツリー
*/
function createTree($root_path){
$root = new HTML_TreeMenu();
$root = createHtmlTree($root_path, $root);
$tree = new HTML_TreeMenu_DHTML($root, array('images' => 'img/TreeMenu'));
return $tree->toHTML();
}
/**
* HTML_TreeNodeでツリーを構成する
*
* @param string $dir パス
* @param HTML_TreeMenu $root ツリーのルート
* @return HTML_TreeMenu ツリーのルート
*/
function createHtmlTree($basedir, $root){
$dir = $basedir;
if(!is_dir($dir)){
return false;
}
$i = 0;
if($handle = opendir($dir)){
while(false !== $file = readdir($handle)){
if($file != "." && $file != ".."){
if(is_dir($dir."/".$file)){
$top_nodes[$i] = createNodes($basedir."/".$file);
$root->addItem($top_nodes[$i++]);
}
else{
$root->addItem(new HTML_TreeNode(
array('text' => $file, 'link' => 'index.php?file='.$basedir."/".$file)));
}
}
}
closedir($handle);
}
return $root;
}
/**
* ルートディレクトリにあるディレクトリのツリーを構成する
*
* @param $string $dir ルートディレクトリ配下のディレクトリパス
* @return HTML_TreeNode ルートディレクトリ配下のうちの1つのディレクトリ
ツリー
*/
function createNodes($basedir){
$dir = $basedir;
if(!is_dir($dir)){
return false;
}
$node = new HTML_TreeNode(new HTML_TreeNode(
array('text' => $dir, 'link' => '')));
if($handle = opendir($dir)){
while(false !== $file = readdir($handle)){
if($file != "." && $file != ".." && $file != "dirname"){
if(is_dir($dir."/".$file)){
$node->addItem(createNodes($basedir."/".$file));
}
else{
$node->addItem(new HTML_TreeNode(
array('text' => $file,
'link' => 'index.php?file='.$basedir."/".$file)));
}
}
}
closedir($handle);
}
return $node;
}
?>
test.php
<script language="javascript" src="js/TreeMenu.js"></script>
<?php
require_once("createTree.php");
$tree = createTree("top_dir");
print $tree;
?>
--
cubicdaiya @ gmail.com
PHP-users メーリングリストの案内