一个办法 : id 和 prarent_id

解决方案 »

  1.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD><TITLE>无限级关联菜单[完全js版](树型)</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    <SCRIPT language=JavaScript type=text/javascript>
    /*
     功能: 无限级关联菜单[完全js版](树型)
     作者: 多菜鸟
     时间: 2007-04-07
     blog: http://blog.csdn.net/kingerq/
     
     数组形如:
     menuArr[ID] = [名称, 父ID];
     
     */
     var menuArr = new Array();
     menuArr[1] = ["中国", 0];
     menuArr[2] = ["美国", 0];
     menuArr[3] = ["日本", 0];
     menuArr[4] = ["浙江", 1];
     menuArr[5] = ["福建", 1];
     menuArr[6] = ["东京", 3];
     menuArr[7] = ["杭州", 4];
     menuArr[8] = ["温州", 4];
     menuArr[9] = ["鹿城", 8];
    var classmenuArr = menuArr; //提取数组
    var classmenuLen = menuArr.length; //数组count
    //分类列表
    var url = "index.php?fun=listProduct&id="; //
    var prefix = new Array("http://community.csdn.net/ui/scripts/System/_resource/MzTreeView/_plus1.gif",
    "http://community.csdn.net/ui/scripts/System/_resource/MzTreeView/_minus1.gif",
    "http://community.csdn.net/ui/scripts/System/_resource/MzTreeView/_line4.gif",
    "http://community.csdn.net/ui/scripts/System/_resource/MzTreeView/_line1.gif");//显示分类
    function listTree(pid, step){ //参数pid,step级
    var str = "";
    for( var i = 1; i < classmenuLen; i++ ) { //注意数组初始值
    if( classmenuArr[i] == undefined ) continue; //如果数组未赋值,则跳至下一个循环
    if( classmenuArr[i][1] == pid ) { //如果数组的第 为PID
    str += "<div class='cutTitle'><table width=230 border=0 cellspacing=0 cellpadding=0><tr><td width="+(20*(step+1))+">"; //打印div,table

    for( var j=0; j<step; j++ ) {
    str += "<img src='"+prefix[2]+"' border=0>"; //打印 |图象sept次
    }
    str += readKid(i) //测试是否有子项目,
    ? "<img id='img"+i+"' src='"+prefix[0]+"' onclick='chkImg("+i+", "+(step+1)+");' border=0>" 
    //打印+图像,名为img(i),onlick,事件为点击事件(参数为(i,step+1)
    : "<img src='"+prefix[3]+"' border=0>";    //没有,打印|-
    str += "</td>"; //一单元格
    str += "<td width='"+(230-20*(step+1))+"' id=\"listtxt1\"><a href='"+(step==0?url.replace(/listProduct2/g, "listProduct"): url)+i+"'"+(returnGetValue("pid")==i? " class='MenuOn'" : "")+">"+classmenuArr[i][0]+"</a></td>";
    str += "</tr>";
    str += "<tr id='tr"+i+"' style='display:none;'><td colspan=2 id='l"+i+"'></td></tr>";
    str += "</table></div>";
       //alert(str);
       //str += listTree(i, step+1);
    }
      }
     //alert(str);
      return str;
    }
    //点击图片事件
    function chkImg(pid, step){
    var d = document.getElementById("l"+pid);
    var dTr = document.getElementById("tr"+pid);
    var dImg = document.getElementById("img"+pid);
    if( dTr.style.display == "none" ) {
    d.innerHTML=listTree(pid, step);
    //document.getElementById("kkk").innerText = d.innerHTML;
    dTr.style.display = "block";
    dImg.src=prefix[1];
    if( navigator.appName == "Netscape" )
    dTr.style.display = "table-row";
    }else{
    dTr.style.display = "none";
    dImg.src=prefix[0];
    }
    }
    //测试是否有子项目
    function readKid(pid){
    for( var i = 1; i < classmenuLen; i++ ) {
    if( classmenuArr[i] == undefined ) continue;
    if( classmenuArr[i][1] == pid ) {
    return true;
    }
    }
    return false;
    }//展开菜单
    //str 以","号分隔的目录ID字符串
    function spreadKid(str){
    var pat = /[\d,]+/;
    if( ! pat.test( str ) ) return;  //如果没有返回
     
    var arr = str.split(",");
    for( var i=0; i < arr.length-1; i++ ) {
    chkImg(arr[i], i+1);   //调用chkimg函数
    }
    }
    //取得指定URL参数值     //什么用
    function returnGetValue(pVar,pURL){
       pURL = pURL || window.location.href;    
       try{
            pURL=decodeURIComponent(pURL)//即使是用decodeURI也是同样的结果
       }catch(e){
                 //
       }   var vars =pURL.split("?");
       if(vars.length==1) return "";
     
       var varsList=vars[1].split("&");
       var equalString;
       for(var i=0;equalString=varsList[i];i++){
            var equalArray=equalString.split("=");      
            if(equalArray[0]==pVar)
                return equalArray[1] || "";
       }
       return "";
    }
    //document.write( listTree(0,0 ) );</SCRIPT><STYLE type=text/css>.cutTitle {
    FONT-SIZE: 12px; OVERFLOW: hidden; WIDTH: 150px; WHITE-SPACE: nowrap; HEIGHT: auto; TEXT-OVERFLOW: ellipsis
    }
    </STYLE><META content="MSHTML 6.00.2900.3429" name=GENERATOR></HEAD>
    <BODY>
    <SCRIPT language=javascript>
    document.write( listTree(0,0) );//显示列表
     //ater(listTree(0,0));//显示列表
    //spreadKid("1,4,8,9");//展开指定项
    </SCRIPT>
    </BODY></HTML>这是一网友的生成的js树,代码简单可以看看,当然,它是不完全,改一下可用,我用它生成了一个和CSDN一样的简单树但生成树的原理却是一样的,不同的是,你点某个节点时,它是用js来展开,而PHP则是得新刷新页生成树
      

  2.   

    大家帮我看看以下代码,可以列出所有文件目录,但是ID号传不到子目录,不知道怎么回事。
    function tree_list_new($dir, $curdir,$id_in) {
    static $id = 0;
    $tree_list = array();
    $root_list1 = listdir($dir);
    $root_list2 = $root_list1['dirlist'];
    if($root_list2 <> "") {
    foreach($root_list2 as $key=>$val) {
    $id++;
    $id_n = $id_in."_".$id_in.$id;

    $id_param = $id_in.$id;
    print $id_param;
    $tree_list[] = array("name" => $val,
    "id" => $id_n,
    "url" => urlencode($curdir."/".$val),
    "child" =>tree_list($dir.$val."/", $curdir."/".$val,$id_param));

    }
    }
    Return $tree_list;
    }
      

  3.   


    function tree_list_new($dir, $curdir,$id_in) {
        static $id = 0;
        $tree_list = array();
        $root_list1 = listdir($dir);
        $root_list2 = $root_list1['dirlist'];
        if($root_list2 <> "") {
            foreach($root_list2 as $key=>$val) {
                $id++;
                $id_n = $id_in."_".$id_in.$id;            $id_param = $id_in.$id;
                print $id_param;
                $tree_list[] = array("name" => $val,
                "id" => $id_n,
                "url" => urlencode($curdir."/".$val),
                "child" =>tree_list($dir.$val."/", $curdir."/".$val,$id_param));       }
       }
    Return $tree_list;
    }