PHP MYSQL 的多级分类树结构
ID,分类ID号
classname,分类名
big_id,上级分类名
要求做出可以无限分类的
样式最好是可以自行调用,例如一般CMS的分类调用
<?php "一级分类"?>
<ul>
<h3>顶级分类</h3>
<li>二级分类</li>
<p>三级分类</p>
<li>二级分类</li>
<li>二级分类</li>
</ul>
PS:我很想悬赏高分,但是我的积分不足,只能把现有的全部悬赏出来了,谢谢 展开
打开数据库那就不写了。
前几天刚写了一个。你看下
/* 表结构
CREATE TABLE `lh_categroy` (
`id` int(10) NOT NULL auto_increment,
`parentid` int(6) NOT NULL,
`name` varchar(255) NOT NULL,
`keyword` varchar(255) NOT NULL COMMENT '关键字',
`des` varchar(255) NOT NULL COMMENT '描述',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;
*/
/**
* 获得所有栏目排序后的列表
* @return array
*/
function getAllOrderColumns($id = 0) {
global $columns;
$result = array();
if ($id) $result[$id] = $columns[$id];
foreach ($columns as $column) {
if ($column['parentid'] == $id) {
$column['level'] = 0;
$result[$column['id']] = $column;
getColumns($columns, $column['id'], $result, 1);
}
}
return $result;
}
function getColumns($columns, $cid, &$result, $l = 1) {
foreach ($columns as $c) {
if ($c['parentid'] == $cid) {
$c['level'] = $l;
$result[$c['id']] = $c;
getColumns($columns, $c['id'], $result, $l + 1);
}
}
}
$sql = 'select * from lh_categroy';
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)){
$columns[]=$row;
}
$fenlei = '';
$fenlei = '<select name="cid" style="width:200px; height:25px;">
<option value="0">请选择分类</option>';
foreach(getAllOrderColumns() as $v){
$v[name] = $v[level] ? ($v[level]==1 ? ' |-'.$v[name]:' |-'.$v[name]) : $v[name];
$fenlei .= "<option value='$v[id]'>$v[name]</option>";
}
$fenlei .= '</select>';
echo $fenlei;
你好,麻烦帮忙写出这样的样式,谢谢
顶级分类
二级分类
三级分类
二级分类
二级分类
把$fenlei这块改了下。。
$aa='<ul>';
foreach(getAllOrderColumns() as $v){
if($v[level]==0){
$aa .= "<h3>$v[name]</h3>";
}elseif($v[level]==1){
$aa .= "<li>$v[name]</li>";
}elseif($v[level]==2){
$aa .= "<p>$v[name]</p>";
}
}
$aa.='</ul>';
/**
* 获取按所属的分类排序的信息
*
* @return 数组
*/
public function getTree(){
/*$data保存的是分类表的所有数据,我这fetchAll方法是自己封装的,你没有就自己想个办法,我相信你会的*/
$data=$this->fetchAll();
/*调用treeList函数,返回分级后的数组,你可以用var_dump()方法打印出这个数组,你就可以发现多了个level的下标元素,level就是你的类等级*/
return $this->treeList($data,0);
}
private function treeList($data,$cid,$level=1){
static $list=array();
foreach ($data as $value){
if($value['cid']==$cid){
$value['level']=$level;
$list[]=$value;
$this->treeList($data,$value['id'],$level+1);
}
}
return $list;
}
请帮忙写出完整的代码
广告 您可能关注的内容 |