«
xzn_html_tree(1.0) 可折叠大纲

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  <code><?<br />/** 可折叠大纲<br />* 类名 Tree<br />* 存放位置 xzn/html/tree.php<br />*/<br />/** 节点类<br />* 用于在树中保存相关参数<br />*<br />* @param $id  节点号<br />* @param $text 节点标题<br />* @param $value 节点参数,一般为url<br />* @param $image 节点图片<br />*/<br />class TreeNode {<br /> 
    var $id;<br /> 
    var $text;<br /> 
    var $value;<br /> 
    var $image;<br /> 
    function TreeNode($id,$text,$value,$image) {<br />  
    $this->id = $id;<br />  
    $this->text = $text;<br />  
    $this->value = $value;<br />  
    $this->image = $image;<br /> 
    }<br />}<br />/** 树类<br />* 用于保存和输出可折叠大纲<br />* 可折叠大纲使用FrontPage 2000的JavaScript脚本<br />*<br />* 方法<br />* set()<br />* 设置节点,节点编号采用1.2.3.4或1-2-3-4的形式。<br />* 无层次限制。输入次序不限。<br />* @param $id  节点号<br />* @param $text 节点标题<br />* @param $value 节点参数,一般为url<br />* @param $image 节点图片<br />*<br />* display()<br />* 向页面输出可折叠大纲<br />*<br />* 属性<br />* @public $node 数组,用于保存节点<br />* @public $jspath 脚本outline.js存放位置<br />*/<br />class Tree {<br /> 
    var $node;<br /> 
    var $jspath;<br /> 
    function set($id,$text,$value="",$image="plus.gif") {<br />  
    $d = split("[.-]",$id);<br />  
    $e = "";<br />  
    for($i=0;$i<count($d);$i++)<br />   
    $e .= "[".$d][$i]."]";<br />  
    $n = new TreeNode($id,$text,$value,$image);<br />  
    eval("\$p=&\$this->node$e;");<br />  
    $p[node] = $n;<br /> 
    }<br /> 
    function display() {<br />  
    echo '<script language="JavaScript" fptype="dynamicoutline">'."\n";<br />  
    echo '<!--'."\n";<br />  
    echo 'function dynOutline() {}'."\n";<br />  
    echo '//-->'."\n";<br />  
    echo '</script>'."\n";<br />  
    echo '<script language="JavaScript1.2" fptype="dynamicoutline" src="'.$jspath.'outline.js">'."\n";<br />  
    echo '</script>'."\n";<br />  
    echo '<script language="JavaScript1.2" fptype="dynamicoutline" for="document" event="onreadystatechange()">'."\n";<br />  
    echo '<!--'."\n";<br />  
    echo 'initOutline()'."\n";<br />  
    echo '//-->'."\n";<br />  
    echo '</script>'."\n";<br />  
    echo '<table dynamicoutline initcollapsed border="0" cellpadding="0" cellspacing="0" onclick="dynOutline()">'."\n";<br />  
    ksort($this->node);<br />  
    reset($this->node);<br />  
    while(list($key,$value) = each($this->node)) {<br />   
    $this->next($value,0);<br />  
    }<br />  
    echo "</table>\n";<br /> 
    }<br /> 
    function next($node,$level) {<br />  
    if(! is_array($node))<br />   
    return;<br />  
    if(isset($node[node])) {<br />//   echo $level.",".$node[node]->id.",".$node[node]->text.",".$node[node]->value.",".$node[node]->image."\n";<br />   
    echo '<tr>'."\n";<br />   
    echo '<td valign="baseline" width="42"><img src="'.$node[node]->image.'"></td>'."\n";<br />   
    echo '<td valign="top" width="100%">';<br />   
    if(empty($node[node]->value))<br />    
    echo $node[node]->text."\n";<br />   
    else<br />    
    echo '<a href="'.$node[node]->value.'">'.$node[node]->text."</a>\n";<br />   
    echo '<table border="0" cellpadding="0" cellspacing="0" width="100%">'."\n";<br />  
    }<br />  
    if(count($node) == 1) {<br />   
    echo "</td></tr>\n</table>\n";<br />   
    return;<br />  
    }<br />  
    ksort($node);<br />  
    reset($node);<br />  
    while(list($key,$value) = each($node)) {<br />   
    $this->next($value,$level+1);<br />  
    }<br />  
    echo "</td></tr>\n</table>\n";<br /> 
    }<br />}<br />?></code></p>