在ThinkPHP框架中,要实现无限级分类和表格树结构,需要使用到ThinkPHP提供的Tree类库。
首先,在模型中定义一个方法,用于获取所有分类数据并组装成树形结构,代码如下:
public function getTreeData()
{
$list = $this->select();
$tree = new \think\Tree();
$tree->init($list);
$treeData = $tree->getTreeList($tree->getTreeArray(0), 'name');
return $treeData;
}
其中,$list
是所有分类数据的数组,$tree
是Tree类库的实例,$tree->init($list)
是将分类数据传入Tree类库进行初始化,$tree->getTreeArray(0)
是获取以0为根节点的树形结构数据,$tree->getTreeList($tree->getTreeArray(0), 'name')
是将树形结构数据按照name字段排序并返回。
接下来,在控制器中调用模型方法获取树形数据,并将数据传入模板进行展示,代码如下:
public function index()
{
$model = new Category();
$treeData = $model->getTreeData();
$this->assign('treeData', $treeData);
return $this->fetch();
}
最后,在模板中使用{:dump($treeData)}
打印出树形数据,使用{:tree($treeData)}
将树形数据展示成表格树结构,其中tree()
是自定义的模板函数,代码如下:
function tree($data)
{
$html = '';
foreach ($data as $key => $value) {
$html .= '<tr>';
$html .= '<td>' . $value['id'] . '</td>';
$html .= '<td>' . str_repeat('—', $value['level'] * 4) . $value['name'] . '</td>';
$html .= '</tr>';
if (!empty($value['children'])) {
$html .= tree($value['children']);
}
}
return $html;
}
其中,$data
是树形数据,$html
是最终生成的表格HTML代码,使用str_repeat('—', $value['level'] * 4)
来生成树形结构的缩进效果。
综上所述,通过使用ThinkPHP提供的Tree类库,可以快速、简便地实现无限级分类和表格树结构。