thinkphp5解决多级子栏目遍历的模型控制器视图代码
模型代码
public static function joinColumnChannel($parentId = 0)
{
// 使用模型自身的查询构造器
$categories = self::alias('a') // 为user表设置别名u
->join('channel c', 'a.channel_id = c.cid', 'LEFT') // LEFT JOIN channel表,并设置别名c
->field('a.typeid, a.typename, a.typeurl, a.channel_id, a.sort, a.fathorid, c.cname') // 指定查询的字段
->where('a.isdel',0)
->where('a.fathorid',$parentId)
->order('a.sort asc')
->select(); // 执行查询,返回结果集
$tree = [];
foreach ($categories as &$category) {
$category['children'] = self::joinColumnChannel($category['typeid']); // 递归查询子栏目
if (empty($category['children'])) {
unset($category['children']); // 如果没有子栏目,则移除children键
}
$tree[] = $category->toArray(); // 转换为数组,避免视图层处理对象
}
return $tree;
}
控制器代码
// 栏目默认首页 列表
public function index()
{
// 实例化模型
$categoryTree = columnModel::joinColumnChannel(); // 调用模型方法获取整个分类树
$this->assign('result', $categoryTree); // 将分类树传递给视图
return $this->fetch('column/list');
}
视图页面代码
<ul>
{volist name="result" id="category"}
<li>{$category.typename}
{notempty name="category.children"}
<ul>
{volist name="category.children" id="child"}
<li>{$child.typename} {$child.typeid}
{notempty name="child.children"}
<ul>
{volist name="child.children" id="child"}
<li>{$child.typename} {$child.typeid}
{notempty name="child.children"}
<ul>
{volist name="child.children" id="sunzi"}
<li>{$sunzi.typename} {$sunzi.typeid}
{notempty name="sunzi.children"}
<!-- 这里可以递归调用子视图或继续嵌套ul/li -->
<!-- 注意修改id -->
{/notempty}
</li>
{/volist}
</ul>
{/notempty}
</li>
{/volist}
</ul>
{/notempty}
</li>
{/volist}
</ul>
{/notempty}
</li>
{/volist}
</ul>
阅读剩余
版权声明:
作者:松跃笔记
链接:https://www.attm.cn/2024/11/06/thinkphp5%e8%a7%a3%e5%86%b3%e5%a4%9a%e7%ba%a7%e5%ad%90%e6%a0%8f%e7%9b%ae%e9%81%8d%e5%8e%86%e7%9a%84%e6%a8%a1%e5%9e%8b%e6%8e%a7%e5%88%b6%e5%99%a8%e8%a7%86%e5%9b%be%e4%bb%a3%e7%a0%81/
文章版权归作者所有,未经允许请勿转载。
THE END