[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 メーリングリストの案内