阅读量:0
ThinkPHP中实现无限级分类的代码如下:,,``
php,public function getTree($cid = 0, $level = 0) {, static $tree = array();, if (!isset($tree[$cid])) {, $model = M('Category');, $list = $model->where(array('pid' => $cid))->order('id asc')->select();, foreach ($list as $k => $v) {, $v['level'] = $level + 1;, $tree[$v['id']] = $v;, $this->getTree($v['id'], $level + 1);, }, }, return $tree;,},
``数据表设计
为了实现无限级分类,首先需要设计一个合适的数据表,以下是一个示例数据表结构:
字段名 | 数据类型 | 描述 |
id | int(11) | 主键ID |
name | varchar(50) | 分类名称 |
pid | int(11) | 父类ID(0表示顶级分类) |
path | varchar(255) | 用于排序的路径字符串 |
模型层代码
在模型层,可以创建一个CateModel类来操作分类表,以下是一个简单的示例:
<?php namespace app\index\model; use think\Model; class CateModel extends Model { protected $trueTableName = 'cate'; // 设置数据表名 }
控制器层代码
在控制器层,可以实现获取无限级分类数据的逻辑,以下是一个示例:
<?php namespace app\index\controller; use think\Controller; use app\index\model\CateModel; class Index extends Controller { public function index() { $cateModel = new CateModel(); $list = $cateModel->field("id, name, pid, path")->order('path')->select(); $this->assign('list', $list); return $this->fetch(); } }
视图层代码
在视图层,可以使用递归的方式展示无限级分类数据,以下是一个示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>无限级分类</title> </head> <body> <ul> <?php function show($data, $level = 0) { ?> <?php foreach ($data as $k => $v) { ?> <li style="padding-left: <?php echo $level * 20 ?>px"><?php echo str_repeat('-', $level) . $v['name'] ?></li> <?php if (isset($v['child']) && !empty($v['child'])) { ?> <?php show($v['child'], $level + 1) ?> <?php } ?> <?php } ?> <?php } ?> <?php show($list) ?> </ul> </body> </html>
相关问题与解答
问题1:如何修改分类的顺序?
答:可以通过修改path
字段的值来调整分类的顺序,将某个分类的path
值从0-1-2
修改为0-1-3
,则该分类将移动到同级分类的末尾。
问题2:如何添加新的分类?
答:可以通过调用模型层的添加方法来添加新的分类,在控制器中添加如下代码:
public function add() { $data = [ 'name' => '新分类', 'pid' => 0, // 设置为顶级分类或指定父分类ID ]; $result = $cateModel->add($data); if ($result) { echo '添加成功'; } else { echo '添加失败'; } }
以上内容就是解答有关“Thinkphp无限级分类代码”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。