今天我将会为大家详细讲解如何使用ThinkPHP框架实现无限分类功能,包括使用递归方法和两条示例说明。
步骤1:创建分类表
首先,我们需要在数据库中创建分类表,该表需要包含以下字段:
- id: 分类ID
- pid: 上级分类ID
- name: 分类名称
可以通过以下SQL语句来创建该表:
CREATE TABLE `category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(10) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
步骤2:创建分类模型
我们需要创建一个分类模型来对分类表进行操作。在ThinkPHP框架中,可以通过继承\think\Model
类来创建一个模型。具体代码如下:
<?php
namespace app\index\model;
use think\Model;
class Category extends Model
{
// TODO: 定义关联模型
}
步骤3:使用递归方法实现无限分类
我们可以使用递归方法来实现无限分类。以下是递归方法的示例代码:
<?php
namespace app\index\controller;
use think\Controller;
use app\index\model\Category as CategoryModel;
class Index extends Controller
{
// 递归获取分类列表
private function getCategoryList($pid = 0, $level = 0)
{
$list = CategoryModel::where('pid', $pid)->select();
$level++;
$result = [];
foreach ($list as $item) {
$item['level'] = $level;
$result[] = $item;
$result = array_merge($result, $this->getCategoryList($item['id'], $level));
}
return $result;
}
public function index()
{
// 获取分类列表
$list = $this->getCategoryList();
$this->assign('list', $list);
return $this->fetch();
}
}
步骤4:两条使用示例说明
示例1:在后台添加分类
在后台添加分类时,我们需要显示所有分类的树形结构,让管理员可以方便的选择上级分类。以下是示例代码:
<!-- 添加分类页面 -->
<form action="<?php echo url('save'); ?>" method="post">
<div class="form-group">
<label>上级分类:</label>
<!-- 显示分类树形结构 -->
<select name="pid" class="form-control">
<option value="0">顶级分类</option>
<!-- 使用递归方法获取分类列表并输出 -->
<?php foreach ($list as $item): ?>
<option value="<?php echo $item['id']; ?>"><?php echo str_repeat('-', $item['level']-1).$item['name']; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label>分类名称:</label>
<input type="text" class="form-control" name="name" required>
</div>
<button type="submit" class="btn btn-primary">添加</button>
</form>
示例2:在前台显示分类
在前台显示分类时,我们需要按照分类的层级进行缩进,以达到显示树形结构的目的。以下是示例代码:
<!-- 显示分类列表 -->
<ul>
<?php foreach ($list as $item): ?>
<li><?php echo str_repeat(' ', $item['level']-1).$item['name']; ?></li>
<?php endforeach; ?>
</ul>
当我们在前台调用以上代码时,将会输出缩进的分类树形结构。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:thinkphp实现无限分类(使用递归) - Python技术站