layui学习:数据库输出树

这篇博客介绍了如何在ThinkPHP5(TP5)框架下利用layui库从mysql数据库生成树形结构。首先创建了laytree表,包含id、name、pid、path、spread、children和href等字段,然后详细阐述了控制器和视图的代码实现,最后引用了layui官方文档中的tree组件用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为自己学习做的一个小笔记,希望对各位初学者有用。

所用材料:

    1、TP5框架

    2、mysql

    3、layui

第一步:创建数据库 laytree表


数据库字段介绍如下:

    1、id:这个不用说了,索引字段

    2、name:node名称

    3、pid:父id (根字段的父id设置为0)

    4、path:我这里放的是路径格式是“1-2-n”表示 id的继承关系

    5、spread:boolean类型,node的打开或者关闭状态

    6、children:子节点的存放处,数据表中都为空

    7、href:连接地址

第二步:控制器代码:

namespace app\index\controller;
use  think\Controller;
use  think\Db;
class Index extends Controller
{
    public function index()
    {
    	$result=array();
        $result=$this->bulid_tree(0); //从pid为0开始查找
        $r=json_encode($result);
   	$this->assign('r',$r);
   	return view();
    }
    //创建树 tree(递归)
    function bulid_tree($root_id){
        $rows=db('laytree')->select();
        $childs=$this->findChild($rows,$root_id);
        if(empty($childs)){
            return null;
        }
        foreach($childs as $k => $v){
            $resultTree=$this->bulid_tree($v['id']);
            if(null != $resultTree){
                $childs[$k]['children']=$resultTree;
                
            }

        }
        return $childs;
    }
    function findChild(&$arr,$id){
        $childs=array();
        foreach($arr as $k => $v){
            if($v['pid']==$id){
                 $childs[]=$v;
            }
            
        }
        return $childs;
    }
}

第三步:视图代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	 <link rel="stylesheet" href="/static/layui/css/layui.css">
</head>
<body>
<ul id="demo"></ul>
<script src="/static/layui/layui.js" charset="utf-8"></script>
<script>
layui.use('tree', function(){
  layui.tree({
    elem:"#demo",
    nodes:{$r}
  });
});
</script>
</body>
</html>

=================分割线==========================

layui官方文档解释:

核心方法

语法:layui.tree(options)

 
 

加载layui.code

  1. layui.use('tree', function(){
  2. layui.tree(options);
  3. });

options是一个对象参数,可支持的key如下表

参数类型描述
elemstring指定元素的选择器
skinstring风格定义
clickFunction点击节点的回调,详细介绍见下文
hrefstring节点链接(可选),未设则不会跳转
targetstring节点打开方式(即a的target值),必须href设定后才有效
nodesobject节点数据,详细格式见下表
节点数据格式

参数nodes是整个树形菜单渲染的关键,其所接受的格式如下

参数类型描述
namestring节点名称
spreadboolean是否展开状态(默认false)
hrefstring节点链接(可选),未设则不会跳转
childrenobject同nodes节点,可无限延伸。如:

codelayui.code

  1. children: [{
  2. name: '子节点'
  3. ,spread: true //展开
  4. ,children: [{
  5. name: '子子节点'
  6. ,children: [……]
  7. }]
  8. }, {……}]
自定义参数-除了上述必要键外,你还可以给每条节点传入自定义参数,如:alias、id等。那么在触发click回调时,就会把节点所拥有的参数都返回给你。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值