使用ztree异步加载数据库数据形成树形菜单
—搞了好久好久,在此记录一下这个这个胜利的时刻!!!!作为一个合格的程序员,任重而道远啊—
项目环境:thinkphp5+mysql+ztree
项目目标:从MySQL数据库获取小区用户位置信息、用户信息利用ztree动态生成树形菜单
mysql数据库表设计
小区地点表
小区用户表
控制器代码
/*** 获取小区用户位置信息\用户信息,并转换为json格式,传给前端展示*/public function getLocationInfo(Request $request){//获取ztree自带提交的参数, 若是页面加载时第一次请求, 该参数为空, $father_id = $request->param('id');//dump($father_id);//全局数据组$data = array();//当请求提交的参数id为空时, 只获取父菜单,if (!isset($father_id)) {//get all father menu//dump("进来了,只获取父菜单");$tempData = array();//获取数据$tempData = LocationModel::all(['LUID'=>NULL]);$a = array();$temp = array();/** JSON数据封装时注意事项, 要求返回的json数据属性为父* {"id":"52","name":"","pid":"null","isParent":true}* 其中id为子节点id, pid为父节点id, name为节点名, isParent标明该节点是否属于父* 节点, 这四个属性**必须***/foreach ($tempData as $value) {$temp['id'] = $value['LID'];$temp['name'] = $value['LName'];$temp['pid'] = $value['LUID'];$temp['isParent'] = $value['isParent'];//加了[],相当于把$a(一维数组)转变为二维数组(自己总结的~~)$a[] = $temp;unset($temp);}//将临时数组$a赋值给全局数组$data,作为返回$data = $a;unset($a);} else { //子节点被点击时,即从前端传来的$father_id不为空时//获取父节点长度,用于判断是加载二三级目录还是加载客户名录列表(小区位置表与小区用户表不是一张表,需要关联查询)$father_id_length = strlen($father_id);//如果获取到的id长度小于3,只加载二级三级目录(二级目录楼栋,三级目录单元)if($father_id_length < 3){//dump('<<<<<3');$tempData = array();$tempData = LocationModel::all(['LUID'=>$father_id]);$a = array();$temp = array();foreach ($tempData as $value) {$temp['id'] = $value['LID'];$temp['name'] = $value['LName'];$temp['pid'] = $father_id;$temp['isParent'] = $value['isParent'];$a[] = $temp;unset($temp);}$data = $a;unset($a);//1、获取客户列表//2、用取得的id(前端通过点击节点传来的父节点id)去客户表(customer)中查询是否存在该父节点下系列客户//若存在则返回json数据,不存在不返回//3、find()-查询单条数据,若查不到数据返回null} else if(LocationModel::table('customer')->where('LID',$father_id)->find()){ //dump('>>>>>>>>3');$tempData1 = LocationModel::table('location loc, customer cus')->where('loc.LID = cus.LID')->field('cus.CID,cus.Name,cus.RoomNo,cus.LID,cus.isParent')->order('cus.CID asc' )->select();$a1 = array();$temp1 = array();foreach ($tempData1 as $value) {$temp1['id'] = $value['CID'];$temp1['name'] = $value['Name'];$temp1['pid'] = $value['LID'];$temp1['isParent'] = $value['isParent'];$a1[] = $temp1;unset($temp1);}$data = $a1;unset($a1);}}//json数据返回//将数组转化为json返回,thinkPHP5return json_encode($data);}
前端htmL代码
<!--引入zTree css样式文件-->
{load href="__STATIC__/lib/zTree/v3/css/zTreeStyle/zTreeStyle.css" /} {/block}
<!-- ztree容器 -->
<ul id="mytree" class="ztree"></ul>
<!--引入zTree js文件-->
<script type="text/javascript" src="__STATIC__/lib/zTree/v3/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript">var setting = {//设置数据格式data: {simpleData: {enable: true,idKey: "id",pIdKey: "pId",rootPId: 0,}},//可勾选check: {enable: true,chkStyle: "checkbox",},async: {enable: true,dataType: "json",url: "getLocationInfo",autoParam: ["id"],type:'post',},// 回调函数 callback : { beforeAsync: zTreeBeforeAsync,onAsyncSuccess: zTreeOnAsyncSuccess, onAsyncError: zTreeOnAsyncError,},};//用于捕获异步加载之前的事件回调函数,zTree 根据返回值确定是否允许进行异步加载function zTreeBeforeAsync(treeId, treeNode) {//alert("这是异步加载之前的事件回调函数");};//异步请求成功的回掉函数//treeId-mytreefunction zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {//alert(msg);};//异步请求失败的回调函数function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {alert('请求失败!');alert(XMLHttpRequest);};$(function() {$.fn.zTree.init($("#mytree"), setting);});</script>
效果图
完结!!!!!!!!!!
———————-重新更新过,现在更完整!—————————-
使用ztree异步加载数据库数据形成树形菜单相关推荐
- ECharts3 实现 AJAX异步加载 数据库数据
ECharts3的文档里其实对异步加载说的很明白,但是示例都是生成的随机数据,大多数应用是直接读数据库数据然后动态加载到ECharts图表里的,简单的思路就是把需要显示的数据库数据封装成json格式, ...
- Angular16 Angular整合zTree、异步加载节点数据
1 前提准备 1.1 新建一个angular4项目 参考博文:点击前往 1.2 去zTree官网下载zTree zTree官网:点击前往 三少使用的版本:点击前往 1.3 参考博客 点击前往01 ...
- zTree 异步加载
前几天一直在研究zTree 怎么实现异步加载,看了很多文章头也是蒙蒙的,现在自己来总结一下,在这里先解释一下所谓的异步加载.异步加载就是数据没有一次性全部加载出来,当用户点击父节点上的"+& ...
- php ztree异步加载数据格式,zTree异步加载简单demo
这几天花了些时间,试了试zTree自带的异步加载方式 还不错. 有个奇怪的问题: 无论我在服务器设置 setContentType("text/plain;charset=UTF-8&quo ...
- ztree java 异步_使用 zTree 异步加载
使用 zTree 异步加载 使用场景 可能需要展示类别很多,如果采用直接加载的方式,需要展示的数据量过大,交互十分不友好.所以采用 zTree 异步加载数据. demo 环境 SpringBoot 1 ...
- WinForm使用多线程异步加载界面数据
WinForm使用多线程异步加载界面数据 处于学习阶段,做个记录,如有写错,请多多指教. private void FrmQC111_Load(object sender, EventArgs e) ...
- Android ListView异步加载数据库图片
需求:从数据库中得到图片的byte数据,编码成png图片,显示到ListView上 这里最大一个问题就是ListView滑动卡的问题,要解决卡,就需要用到异步加载数据库的图片: 原创博客,转载注明出处 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...
- ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点
对于ztree,整了两天了,在数据库中查出json符合格式的数据,这很好整,但是在ztree追加时出现重复节点,找了半天资源,最终还是用ztree自带的异步加载解决问题,特此记录一下下!!如果不足请指 ...
最新文章
- css div 垂直居中设置
- python自动化测试脚本怎么编写_编写自动化测试脚本心得---菜鸟入门篇
- 掌握 React 与 React Native
- 2018年面试准备汇总
- Windows驱动——利用WinDriver开发PCI设备驱动程序
- Android File存储
- 全球顶级银行资管子公司的启示
- Alfred效率神器
- pay.onzan.en app.php,IBOS 协同办公平台PHP版 v1.0
- 伦敦 quant_伦敦统一用户组7
- 《Cinema 4D + After Effects动态图形设计案例解析》——第 1 章 动态图形设计概述 1.1 什么是动态图形...
- gmail+mtalk配合打免费网络电话。
- linux dns 自动识别,Linux 自动化部署DNS服务器
- Redis从生米煮成熟饭
- win7 linux终端模拟器,SecureCRT(终端仿真器)
- 入门知识 | 计算机语言
- java 抽象类题目
- 怎么用计算机管理权限删除文件,如何删除需要管理员权限才能删除的文件夹?...
- SEO关键词分析优化工具
- 宝塔php原理,宝塔php建站教程