ThinkPHP5使用模型进行多级栏目输出并在视图页面遍历显示
模型代码
// application/common/model/Category.php
namespace app\common\model;
use think\Model;
class Category extends Model
{
// ... 其他模型属性和方法
/**
* 获取指定父ID下的所有子栏目,包括子栏目的子栏目等(递归)
* @param int $parentId 父栏目ID
* @return array 栏目数组
*/
public static function getCategoryTree($parentId = 0)
{
$categories = self::where('parent_id', $parentId)->select();
$tree = [];
foreach ($categories as &$category) {
$category['children'] = self::getCategoryTree($category['id']); // 递归查询子栏目
if (empty($category['children'])) {
unset($category['children']); // 如果没有子栏目,则移除children键
}
$tree[] = $category->toArray(); // 转换为数组,避免视图层处理对象
}
return $tree;
}
}
控制器代码
// application/index/controller/Category.php
namespace app\index\controller;
use think\Controller;
use app\common\model\Category;
class CategoryController extends Controller
{
public function index()
{
$categoryTree = Category::getCategoryTree(); // 调用模型方法获取整个分类树
$this->assign('categoryTree', $categoryTree); // 将分类树传递给视图
return $this->fetch(); // 渲染视图
}
}
视图代码
<!-- application/index/view/category/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>多级栏目</title>
</head>
<body>
<ul>
{volist name="categoryTree" id="category"}
<li>{$category.name}
{notempty name="category.children"}
<ul>
{volist name="category.children" id="child"}
<li>{$child.name}
{notempty name="child.children"}
<!-- 这里可以递归调用子视图或继续嵌套ul/li -->
{/notempty}
</li>
{/volist}
</ul>
{/notempty}
</li>
{/volist}
</ul>
</body>
</html>
阅读剩余
版权声明:
作者:松跃笔记
链接:https://www.attm.cn/2024/11/06/thinkphp5%e4%bd%bf%e7%94%a8%e6%a8%a1%e5%9e%8b%e8%bf%9b%e8%a1%8c%e5%a4%9a%e7%ba%a7%e6%a0%8f%e7%9b%ae%e8%be%93%e5%87%ba%e5%b9%b6%e5%9c%a8%e8%a7%86%e5%9b%be%e9%a1%b5%e9%9d%a2%e9%81%8d%e5%8e%86%e6%98%be/
文章版权归作者所有,未经允许请勿转载。
THE END