# ThinkPHP框架无限级栏目的排序功能实现方法示例
## 1. 什么是无限级栏目
无限级栏目是指栏目无上限限制,可以无限制地向下拆分子栏目。
## 2. ThinkPHP框架如何实现无限级栏目
ThinkPHP框架提供了非常方便的实现方式。需要在数据库中建立category表来实现,表的结构如下:
```sql
CREATE TABLE `category` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父级栏目ID,0则代表顶级栏目',
`level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '栏目等级',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`create_time` int(11) DEFAULT NULL COMMENT '创建时间',
`update_time` int(11) DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
在category表中,id为主键,name为栏目名称,pid为父级栏目ID,0则代表顶级栏目,level为栏目等级,sort为排序,create_time为创建时间,update_time为更新时间。
## 3. 实现无限级栏目的排序功能
实现无限级栏目排序功能需要在模型文件中添加一个公共方法以及调用。具体实现代码如下:
```php
class Category extends Model
{
/**
* 按栏目等级和排序返回全部栏目
* @param int $pid 父级栏目ID
* @param int $level 栏目等级
* @return mixed 栏目列表
*/
public function getCategoryList($pid = 0, $level = 1)
{
$map = [
'pid' => $pid,
'level' => $level,
];
$list = $this->where($map)->order('sort ASC')->select();
foreach ($list as &$item) {
$item['child'] = $this->getCategoryList($item['id'], $level + 1);
}
unset($item);
return $list;
}
}
```
以上代码中,getCategoryList方法接受两个参数,分别为pid和level,pid为父级栏目ID,level为栏目等级。同时,该方法也可以不传参数,获取所有的分类数据。
## 4. 总结
综上所述,通过以上方法可以很容易地实现ThinkPHP框架无限级栏目的排序功能,提高网站的可视化效果。