无极限分类模块
1. 数据字典(举例)
类型 |
注释 |
类型 |
备注 |
id |
分类表自增id |
int |
|
name |
分类的名字 |
varchar |
|
pid |
父级id |
int |
|
path |
分类路径 |
varchar |
|
level |
等级 |
int |
|
2.创建分类表
create table `good_type`(
`id` int primary key not null auto_increment,
`name` varchar(20) not null default '',
`level` int not null default 0 comment '等级',
`pid` int comment '父级id',
`path` varchar(10) comment '分类路径'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.代码实现(举例)
<?php
function get_str($id = 0) {
global $str;
global $link;
//global 关键词用于访问函数内的全局变量。
$sql = "select id,title from class where pid= $id";
$result = mysqli_query($link,$sql);
//查询pid的子类的分类
if($result){
//如果有子类
$str .= '<ul>';
while ($row = mysqli_fetch_array($result)) {
//循环记录集
$str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>";
//构建字符串
get_str($row['id']);
//调用get_str(),将记录集中的id参数传入函数中,继续查询下级
}
$str .= '</ul>';
}
return $str;
}
echo get_str(0);
?>
实现 思路:
定义一个自定义函数get_str ,设置父类pid = 0, 使用SQL语句查询出它的子类,把查询出来的子类放置到$result中 ; 使用while循环出子类,通过构建字符串做成输出的样式,调用自定义函数get_str,将子类的id传入自定义函数中,然后继续查询下一级。
补充:
PHP str_repeat() 函数的运用
实例
把字符串 "Shanghai " 重复 5 次:
<?php
echo str_repeat("Shanghai",5);
?>
在无极限分类模块可以使用这个函数实现“——”的重复,只需根据表里的等级level字段就能实现
比如原来代码:
//循环记录集
$str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>";
优化后的代码:
//循环记录集
$str .= "<li>" . $row['id'] . str_repeat(" -- ", $row[ ' level ']). $row['title'] . "</li>";