发一个自已写的无限级分类
时间:2007-07-05
来源:互联网
PHP代码:
<?php
class MyChannel{
/**
* get_query执行SQL语句
* get_menu为得到主级栏目列表,
* get_channel递归得到各栏目的下属栏目
* get_show将栏目信息输出
* @param dbConnect $db
*/
function __construct(dbConnect $db){
$this->db = $db;
}
function get_menu(){
$one = '';
$out = array();
$sql = "select * from channel where parentid=0 order by channelid";
$menu = $this->get_query($sql);
foreach ($menu as $key=>$value){
if($value[editlist]){
$editlist = $this->get_editlist($value[editlist]); //编辑人员名称
}
$query = "select * from channel where parentid=".$value[channelid]." order by parentid";
if($one = $this->get_query($query)){
$out3 = $this->get_channel($one); //查看下级栏目
$out[] = array('channelid'=>$value[channelid],'channelname'=>$value[channelname],'editlist'=>$editlist,'child'=>$out3);
}
}
return $out;
}
function get_channel($channel){
$one = '';
$o = array();
$out2 = array();
foreach ($channel as $k=>$v){
if($v[editlist]){
$editlist = $this->get_editlist($v[editlist]); //编辑人员名称
}
$query = "select * from channel where parentid=".$v[channelid]." order by parentid";
if($one = $this->get_query($query)){
$out2 = $this->get_channel($one); //查看下级栏目
$o[] = array('channelid'=>$v[channelid],'channelname'=>$v[channelname],'editlist'=>$editlist,'child'=>$out2);
}else{
$o[] = array('channelid'=>$v[channelid],'channelname'=>$v[channelname],'editlist'=>$editlist);
}
}
return $o;
}
function get_editlist($str){
$editid = explode(',',$str);
for($i=0;$i<count($editid);$i++){
if($i!=(count($editid)-1)){
$id .= "id=$editid[$i] or ";
}else{
$id .= "id=$editid[$i]";
}
}
$sql = "select username from admin where $id";
$user = $this->db->query_array($sql);
for($i=0;$i<count($user);$i++){
if($i!=(count($user)-1)){
$username .= $user[$i][username].',';
}else{
$username .= $user[$i][username];
}
}
return $username;
}
function get_query($sql){
$result = $this->db->query_array($sql);
return $result;
}
// function show_menu($result,$i=0){
// if(count($result) > 0){
// foreach ($result as $key=>$value){
// $i++;
// if($value[child]){//判断有没有子分类
// $img = "<img id = 'img".$value['channelid']."' src='./images/jia.jpg' onclick='click_catalog(".$value['channelid'].")'/>"; //显示+或-号图标,当点击时击活js函数
// }else{
// $img = " "; //没有子分类,就不显示+,-号图片,显示空格串
// }
// if($value[child]){
// for($j=1;$j<$i;$j++){
// $space .= " ";
// }
// }else{
// for($j=2;$j<$i;$j++){
// $space .= " ";
// }
// }
// $out .= $space.$img; //先输出空图片,再输出+或-号.(当然若无子分类,也是空格串)
// $out .= "<a class='menu' href = 'javascript:send_id(".$value['channelid'].")'>";
// $out .= $value['channelname']."</a>".$value['editlist']."<br>"; //输出分类名
// $space = ""; //一层目录显示结束后,初始化$space
// if($value[child]){ //判断有否子分类
// $hidden_div = "style='display:none'"; //初始化风格为不显示子分类
// $out .= "<div id = 'div".$value[channelid]."' ".$hidden_div.">";
// $out .= $this->show_menu($value[child],$i); //关键部分,递归调用,显示下级目录
// $out .= "</div>";
// }
// $i=0;
// }
// }
// return $out ;
// }
function insert_html($result,$j=0){
$j++;
for($i=1;$i<$j;$i++){
$space .= " ";
}
for($i=0;$i<count($result);$i++){
if($result[$i][child]){
$img = "<img id = 'img".$result[$i]['channelid']."' src='./images/jia.jpg' onclick='click_catalog(".$result[$i]['channelid'].")'/>"; //显示+或-号图标,当点击时击活js函数
$result[$i][html] = $space.$img;
$result[$i][child]= $this->insert_html($result[$i][child],$j);
}else{
$img = "<img src='./images/jian.jpg' />";
$result[$i][html] = $space.$img;
}
}
$j=0;
return $result;
}
function show($result){
foreach ($result as $key=>$value){
$out .= "<tr>";
$out .= "<td width='10%'>$value[html]</td><td width='10%'>$value[channelid]</td><td width='40%'><div align='left'><a href='article_list.php?cid=".$value[channelid]."'>$value[channelname]</a></div></td><td><div align='left'>$value[editlist]</div></td>";
$out .= "</tr>\r";
if($value[child]){
$out .= "<tr><td colspan=4><table width='100%' border=0 id = 'div".$value[channelid]."' style='display:none' cellspacing=1 bgcolor='#FFFFFF'>";
$out .= $this->show($value[child]);
$out .= "</table></td></tr>\r";
}
}
return $out;
}
function get_show($result){
$out = $this->insert_html($result);
return $this->show($out);
}
function __destruct(){
unset($db);
}
}
?>
PHP代码:
<?php
require_once('../global.inc.php');
$db = new dbConnect();
$channel = new MyChannel($db);
$result = $channel->get_menu();
$data = $channel->get_show($result);
echo "<table>";
echo $data;
echo "</table>";
?>
作者: keminar 发布时间: 2007-07-05
作者: keminar 发布时间: 2007-07-05
作者: keminar 发布时间: 2007-07-07
虽然我还不太懂无限极分类,
收下,学习ing。。。
作者: kobejiang 发布时间: 2007-07-07
作者: keminar 发布时间: 2007-07-07
作者: gleon 发布时间: 2007-07-08
作者: learsu 发布时间: 2007-07-11

这么多人看,其实写的很不好的.哈哈.
作者: keminar 发布时间: 2007-07-11
作者: yzxh24 发布时间: 2007-07-11
可是这样是不是调用数据库的次数太多了
作者: jingangel 发布时间: 2008-01-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28