<?
/** 可折疊大綱
* 類名 Tree
* 存放位置 xzn/html/tree.php
*/
/** 節點類
* 用於在樹中保存相關參數
*
* @param $id 節點號
* @param $text 節點標題
* @param $value 節點參數,一般為url
* @param $image 節點圖片
*/
class TreeNode {
var $id;
var $text;
var $value;
var $image;
function TreeNode($id,$text,$value,$image) {
$this->id = $id;
$this->text = $text;
$this->value = $value;
$this->image = $image;
}
}
/** 樹類
* 用於保存和輸出可折疊大綱
* 可折疊大綱使用FrontPage 2000的JavaScript腳本
*
* 方法
* set()
* 設置節點,節點編號采用1.2.3.4或1-2-3-4的形式。
* 無層次限制。輸入次序不限。
* @param $id 節點號
* @param $text 節點標題
* @param $value 節點參數,一般為url
* @param $image 節點圖片
*
* display()
* 向頁面輸出可折疊大綱
*
* 屬性
* @public $node 數組,用於保存節點
* @public $jspath 腳本outline.js存放位置
*/
class Tree {
var $node;
var $jspath;
function set($id,$text,$value="",$image="plus.gif") {
$d = split("[.-]",$id);
$e = "";
for($i=0;$i<count($d);$i++)
$e .= "[".$d][$i]."]";
$n = new TreeNode($id,$text,$value,$image);
eval("$p=&$this->node$e;");
$p[node] = $n;
}
function display() {
echo '<script language="JavaScript" fptype="dynamicoutline">'." ";
echo '<!--'." ";
echo 'function dynOutline() {}'." ";
echo '//-->'." ";
echo '</script>'." ";
echo '<script language="JavaScript1.2" fptype="dynamicoutline" src="'.$jspath.'outline.js">'." ";
echo '</script>'." ";
echo '<script language="JavaScript1.2" fptype="dynamicoutline" for="document" event="onreadystatechange()">'." ";
echo '<!--'." ";
echo 'initOutline()'." ";
echo '//-->'." ";
echo '</script>'." ";
echo '<table dynamicoutline initcollapsed border="0" cellpadding="0" cellspacing="0" onclick="dynOutline()">'." ";
ksort($this->node);
reset($this->node);
while(list($key,$value) = each($this->node)) {
$this->next($value,0);
}
echo "</table> ";
}
function next($node,$level) {
if(! is_array($node))
return;
if(isset($node[node])) {
// echo $level.",".$node[node]->id.",".$node[node]->text.",".$node[node]->value.",".$node[node]->image." ";
echo '<tr>'." ";
echo '<td valign="baseline" width="42"><img src="'.$node[node]->image.'"></td>'." ";
echo '<td valign="top" width="100%">';
if(empty($node[node]->value))
echo $node[node]->text." ";
else
echo '<a href="'.$node[node]->value.'">'.$node[node]->text."</a> ";
echo '<table border="0" cellpadding="0" cellspacing="0" width="100%">'." ";
}
if(count($node) == 1) {
echo "</td></tr> </table> ";
return;
}
ksort($node);
reset($node);
while(list($key,$value) = each($node)) {
$this->next($value,$level+1);
}
echo "</td></tr> </table> ";
}
}
?>