注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php 王建

php之路

 
 
 

日志

 
 

php 模块树(递归无限分类)  

2013-04-12 19:54:50|  分类: php类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在网站上经常会看到php分类树,其实原理也不是很复杂,首先是数据表,然后是php页面读取,然后再web页面进行js 递归调用即可 效果图如下:

递归调用即可 效果图如下:

点击查看原图

数据库结构是3个字段,一个id 一个父id 和一个name值

DROP TABLE IF EXISTS `tmodule_conf`;

CREATE TABLE `tmodule_conf` (

  `ModuleId` int(10) NOT NULL auto_increment,

  `SupModuleId` int(10) default NULL,

  `ModuleName` varchar(40) default NULL,

  PRIMARY KEY  (`ModuleId`)

) ENGINE=InnoDB AUTO_INCREMENT=660 DEFAULT CHARSET=utf8;

INSERT INTO `tmodule_conf` VALUES ('651', '-1', '书籍');

INSERT INTO `tmodule_conf` VALUES ('652', '651', '科学书籍');

INSERT INTO `tmodule_conf` VALUES ('653', '651', '科学书籍1');

INSERT INTO `tmodule_conf` VALUES ('654', '-1', '技术');

INSERT INTO `tmodule_conf` VALUES ('655', '654', 'php技术');

INSERT INTO `tmodule_conf` VALUES ('656', '654', 'js技术');

INSERT INTO `tmodule_conf` VALUES ('657', '654', 'html技术');

INSERT INTO `tmodule_conf` VALUES ('658', '654', 'linux技术');

INSERT INTO `tmodule_conf` VALUES ('659', '654', 'mysql技术');

前台页面时如下代码:

<pre class="brush:html; toolbar: true; auto-links: true;"><html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title> 目录树测试 </title>

<script type="text/javascript" src="jquery.js"></script>

</head>

<script language="JavaScript" >

function ShowMenu(ID) 

var MenuID = "Menu"+ID;

var ImgID = "img" + ID;

if(document.getElementById(MenuID).style.display=="none") 

document.getElementById(MenuID).style.display=""; 

document.getElementById(ImgID).src="NodeImg2.gif"; 

else 

 document.getElementById(MenuID).style.display="none"; 

 document.getElementById(ImgID).src="NodeImg1.gif"; 


function DoSelect(ID) 

  root_flag = 0;

  var oEle = $("div .Menu")

  for(var i=0;i<oEle.length;i++)

      oEle[i].style.cssText="";


  var SeleID = "select" + ID;

  document.getElementById(SeleID).style.cssText="border:1px Solid #AAAA11;color:Red";//"border:1px solid #F00000;";


  document.getElementById("id").value=ID;

  document.getElementById("opflag").value='mod';

  //$("#parrentMod").show();

  //$("#parrentAdd").hide();





</script>

<body>

<form id="form1">

<input type="hidden" name="id" id="id" value="">

<input type="hidden" name="opflag" id="opflag" value="">

<div class="containDiv">

<div class="left">

<div id="CollapsiblePanel3" class="panel_container">

<div class="subcolumn_title" rel="panel_body_CollapsiblePanel3">

<div class="st_pic"></div>

<div class="st_tittle">模块树</div>

<div class="st_more">

<a href="#"></a>

</div>

</div>

<div id="panel_body_CollapsiblePanel3" class="panel_body">

<div style="padding: 10px 10px;">


<div id="lefttree">

</div>


</div>

<div style="clear:both;"> </div>

</div>

</div>

</div>

</form>

</body>

</html>

<script type="text/javascript">

//获取子节点

function getChild(module_tree,memuid){

    var shtml = '<table cellpadding="0" cellspacing="0" border="0">\n';

for(var i=0; i<module_tree.length;i++)

{

  var supmemuid = memuid*10 + i;

  var ModuleId = module_tree[i]['ModuleId'];

  var ModuleName = module_tree[i]['ModuleName'];

  var ModuleTypeId = module_tree[i]['ModuleTypeId'];

  var Child = module_tree[i]['Child'];

  var SltClkStr = 'DoSelect('+ModuleId+')';

//   if(ModuleTypeId == 0) SltClkStr = 'DoSelectRoot('+ModuleId+')';

  if(Child != undefined && Child.length>0)

{

 shtml += '<tr onclick="'+SltClkStr+'">\n';

 if(ModuleTypeId == 1)

   shtml += '<td width="20"><img id="img'+supmemuid+'" border="0" src="NodeImg1.gif"  onclick="ShowMenu('+supmemuid+');'+SltClkStr+'"></td>\n';

 else

   shtml += '<td width="20"><img id="img'+supmemuid+'" border="0" src="NodeImg2.gif"  onclick="ShowMenu('+supmemuid+');'+SltClkStr+'"></td>\n';

 shtml += '<td><div id="select'+ModuleId+'" class="Menu" style=""> '+ModuleName+' </div></td>\n';

 shtml += '</tr>\n'; 

 var inChild = Child;

 if(ModuleTypeId == 1)

  shtml += '<tr id="Menu'+supmemuid+'" style="display:none;" >\n';

 else

           shtml += '<tr id="Menu'+supmemuid+'" style="display:\'\'" >\n';

 shtml += '<td width="20"> </td>'; 

          shtml += '<td>'; 

 shtml += getChild(inChild,supmemuid); //递归函数获取整树

 shtml += '</td></tr>'; 

}

else

{

          shtml += '<tr onclick="'+SltClkStr+'">\n';

 shtml += '<td width="20"><img id="img'+supmemuid+'" border="0" src="NodeImg0.gif"></td>\n';

 shtml += '<td><div id="select'+ModuleId+'" class="Menu" style=""> '+ModuleName+' </div></td>\n';

 shtml += '</tr>'; 

}

}

     shtml += '</table>';

return shtml;

}


$(function(){

url = 'tree.php';

$.ajax({

  type: "GET",

  url: url,

  data: "",

  cache:false,

  dataType:"json",

  success: function(msg){

var shtml = getChild(msg,1);

$("#lefttree").html(shtml);

  }

 

});


});

</script></pre><pre class="brush:html; toolbar: true; auto-links: true;">然后新建一个php页面tree.php代码如下:</pre><pre class="brush:html; toolbar: true; auto-links: true;"><pre class="brush:php; toolbar: true; auto-links: true;"><?php

header("Content-type:text/html;charset=utf-8");

$src_host = 'localhost';

$src_user = "root";

$src_passwd = "wangjian";

$src_database = "helper";//源数据库

$src_con = mysql_connect($src_host,$src_user,$src_passwd)  or die("error");

mysql_select_db($src_database,$src_con);

$res = queryModuleTree($src_con);

echo json_encode($res);

    //查询一级父节点列表   

function queryModuleTree($src_con) {   

$sql = "select SupModuleId,ModuleId,ModuleName from tModule_Conf where   SupModuleId=-1  "; 

//OSS_LOG(__FILE__,__LINE__,Logger::LP_DEBUG, $sql."\n");

$result = array();

$result = query_res($sql,$src_con);

for($i=0;$i<count($result);$i++)

{

         $moduleid = $result[$i]['ModuleId'];

$result[$i]['Child'] = get2ndModuleBySup($moduleid,$src_con);

}

        return $result;   

    }   

 //通过SupModuleId查询二级Module

     function get2ndModuleBySup($ModuleId,$src_con) { 

$sql = "select ModuleId,SupModuleId,ModuleName from tModule_Conf where  SupModuleId={$ModuleId} "; 

$result = array();

$result = query_res($sql,$src_con);

        for($i=0;$i<count($result);$i++)

{

         $moduleid = $result[$i]['ModuleId'];

if(getChildCnt($moduleid,$src_con)>0)

  $result[$i]['Child'] = get2ndModuleBySup($moduleid,$src_con);

}

        return $result;   

    }

    //获取子节点个数

function getChildCnt($ModuleId,$src_con) { 

        $sql = "select count(*)  as cnt from tModule_Conf where  SupModuleId={$ModuleId}"; 

$result = array();

$result = query_res($sql,$src_con);

return $result[0]['cnt'];

}


function query_res($sql,$con){

mysql_query("SET NAMES 'utf8'");

    $query = mysql_query($sql,$con);

    $row = array();

    while($q = mysql_fetch_array($query,MYSQL_ASSOC)){

        $row[] = $q ;

    }

    return $row ;

}</pre><pre class="brush:php; toolbar: true; auto-links: true;">注意:上面引入和jquery.js文件</pre></pre>

php代码如下:

<?php

header("Content-type:text/html;charset=utf-8");

$src_host = 'localhost';

$src_user = "root";

$src_passwd = "wangjian";

$src_database = "helper";//源数据库

$src_con = mysql_connect($src_host,$src_user,$src_passwd)  or die("error");

mysql_select_db($src_database,$src_con);

$res = queryModuleTree($src_con);

echo json_encode($res);

    //查询一级父节点列表   

function queryModuleTree($src_con) {   

$sql = "select SupModuleId,ModuleId,ModuleName from tModule_Conf where   SupModuleId=-1  "; 

//OSS_LOG(__FILE__,__LINE__,Logger::LP_DEBUG, $sql."\n");

$result = array();

$result = query_res($sql,$src_con);

for($i=0;$i<count($result);$i++)

{

         $moduleid = $result[$i]['ModuleId'];

$result[$i]['Child'] = get2ndModuleBySup($moduleid,$src_con);

}

        return $result;   

    }   

 //通过SupModuleId查询二级Module

     function get2ndModuleBySup($ModuleId,$src_con) { 

$sql = "select ModuleId,SupModuleId,ModuleName from tModule_Conf where  SupModuleId={$ModuleId} "; 

$result = array();

$result = query_res($sql,$src_con);

        for($i=0;$i<count($result);$i++)

{

         $moduleid = $result[$i]['ModuleId'];

if(getChildCnt($moduleid,$src_con)>0)

  $result[$i]['Child'] = get2ndModuleBySup($moduleid,$src_con);

}

        return $result;   

    }

    //获取子节点个数

function getChildCnt($ModuleId,$src_con) { 

        $sql = "select count(*)  as cnt from tModule_Conf where  SupModuleId={$ModuleId}"; 

$result = array();

$result = query_res($sql,$src_con);

return $result[0]['cnt'];

}


function query_res($sql,$con){

mysql_query("SET NAMES 'utf8'");

    $query = mysql_query($sql,$con);

    $row = array();

    while($q = mysql_fetch_array($query,MYSQL_ASSOC)){

        $row[] = $q ;

    }

    return $row ;

}


  评论这张
 
阅读(232)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018