zTree异步加载树形菜单

zTree异步加载树形菜单

ztree是依赖于jquery实现的多功能树插件, 也是目前做菜单管理、权限管理用的较多的前段插件之一。目前ztree功能十分强大, 这里只用了部分异步加载的功能。

zTree官网地址

页面截图

这里写图片描述

前端代码

文件引入, 注意ztree基于jquery实现, 在它之前一定要先引入jquery

<script type="text/javascript" src="./js/jquery.js">
<link rel="stylesheet" href="./zTree_v3/css/zTreeStyle/zTreeStyle.css" type="text/css"/>
<script type="text/javascript" src="./zTree_v3/js/jquery.ztree.core-3.5.min.js"></script>

全局ztree设置, 详情可参考管方API

//ztree配置
var setting = {
    async: {
        //设置 zTree 是否开启异步加载模式默认值:false
        enable: true,
        //请求URL, 该处是采用php的thinkphp框架来处理URL
        url:"{:U('System/asyncrequest')}",
        //请求时自动提交的参数, 该参数服务端可直接用$_POST(php)/(java)request.getParameter()获取
        autoParam:["id", "name"],
        //返回的数据过滤器
        dataFilter: filter,
        //对返回返回的数据字体设置
        fontCss: setFont,
    },
    //设置回调
    callback: {
        //节点点击之前触发方法
        beforeClick: zTreeOnBeforeClick,
        //节点点击时
        onClick: zTreeOnClick,
        //异步请求错误回调方法
        onAsyncError: zTreeOnAsyncError
    }
};

//异步请求错误回调方法, 未处理!!!
function zTreeOnAsyncError(event, treeId, treeNode, XMLHttpRequest, textStatus, errorThrown) {
   alert(XMLHttpRequest);
};

/**
* 对请求返回的数据进行字体设置
* @param treeId 树节点id
* @param treeNode 树节点对象
*/
function setFont(treeId, treeNode) {
    if (treeNode && treeNode.isParent) {
        //父节点设置字体为blue
        return {color: "blue"};
    } else {
        return null;
    }
}

/*
*节点点击前触发方法,用于捕获单击节点之前的事件回调函数,并且根据返回值确定是否允许单击操作,默认值:null
*若返回folse, 则中断后续操作, 不会像服务器发送请求
*/
function zTreeOnBeforeClick(treeId, treeNode) {
    //该处判断点击节点是否属于父节点
    var check = (treeNode && !treeNode.isParent);
    return check;
}

//请求成功后的数据过滤函数
function filter(treeId, parentNode, childNodes) {
    if (!childNodes) return null;
    for (var i=0, l=childNodes.length; i<l; i++) {
        childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
    }
    return childNodes;
}

//节点点击时触发的回调
function zTreeOnClick(even, treeId, treeNode) {
    //获取点击节点的id和name, 要求返回的json数据有该属性
    var sub_id       = treeNode.id;
    var sub_name     = treeNode.name;
    var parentId     = treeNode.getParentNode().id;
    var parentName   = treeNode.getParentNode().name;

}



//页面在家是初始化ztree, 需要绑定tree显示的dom元素ID
$(document).ready(function(){
    $.fn.zTree.init($("#dropdownMenu"), setting);
});

页面DOM元素

<div id="DropdownMenuBackground" style="position:absolute; height:260px;width: 260px;min-width:205px; background-color:white;border:1px solid;overflow-y:auto;overflow-x:auto;margin-top: 74px;margin-left: 47%;">
    <!-- ztree要求放在ul元素下, class指定为ztree样式文件的ztree -->
    <ul id="dropdownMenu" class="ztree"></ul>
</div>

服务端配置

     /**
     *  异步请求菜单
     *  首先获取页面请求的id, 即autoParam:["id", "name"],提交的参数, 若是页面加载时第一次请
     *  求,则该参数为空。 
     * 
     */
    public function asyncrequest(){
        //获取ztree自带提交的参数, 若是页面加载时第一次请求, 该参数为空,     
        $father_id = $_POST['id'];

        //php实例化模型, 查询数据库数据, 此处根据不同语言不同实现
        $model = D('Module');

        $data = array();
        //当请求提交的参数id为空时, 只获取父菜单,
        if (!isset($father_id)) {//get all father menu
            $tempData = array();

            //获取数据
            $tempData =  $model->getAllModule(array('pmid' => -1, 'enable' => 1) );
            $a = array();

            /*
            * JSON数据封装时注意事项, 要求返回的json数据属性为父
            * {"id":"52","name":"","issuper":"0","pid":"-1","isParent":true}
            * 其中id为子节点id, pid为父节点id, name为节点名, isParent标明该节点是否属于父
            * 节点, 这四个属性**必须**
            */

            foreach ($tempData as $d) {
                $tempData['id'] = $d['mid'];
                $tempData['name'] = $d['name'];
                $tempData['issuper'] = $d['is_super'];
                $tempData['pid'] = $d['pmid'];
                $tempData['isParent'] = true;
                $a[] = $tempData;
                unset($tempData);
            }
            $data = $a;
            unset($a);

        //子节点点击时
        } else {//get all sun node where mid = $father_id
            $tempData = array();
            $tempData =  $model->getAllModule(array('enable' => 1, 'pmid' => $father_id) );
            $a = array();
            foreach ($tempData as $d) {
                $tempData['id'] = $d['mid'];
                $tempData['name'] = $d['name'];
                $tempData['issuper'] = $d['is_super'];
                $tempData['pid'] = $father_id;
                $tempData['isParent'] = false;
                $a[] = $tempData;
                unset($tempData);
            }
            $data = $a;
            unset($a);
        }

    //json数据返回
        $this->ajaxReturn($data, "JSON");
    }

该dome采用php作为服务端, php不熟的可在百度云盘下载Java版的按理!!!!!!


版权所有 @ruoyi 转载请注明出处!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值