在Admin\View\Public\base.html中有 {:extra_menu($_extra_menu,$__MENU__)}这句调用。
参数$_extra_menu在Admin\Controller\AddonsController.class.php进行指定,代码为:

     $this->assign('_extra_menu',array('已装插件后台'=> D('Addons')->getAdminList(),));

参数$__MENU__在Admin\Controller\AdminController.class.php中进行指定,代码为:

 $this->assign('__MENU__', $this->getMenus());

函数getMenus()的代码为:

     /*** 获取控制器菜单数组,二级菜单元素位于一级菜单的'_child'元素中* */final public function getMenus($controller=CONTROLLER_NAME){// $menus  =   session('ADMIN_MENU_LIST'.$controller);if(empty($menus)){// 获取主菜单$where['pid']   =   0;$where['hide']  =   0;if(!C('DEVELOP_MODE')){ // 是否开发者模式$where['is_dev']    =   0;}$menus['main']  =   M('Menu')->where($where)->order('sort asc')->select();//获得主菜单 $menus['child'] = array(); //设置子节点//高亮主菜单 获得当前url的id$current = M('Menu')->where("url like '%{$controller}/".ACTION_NAME."%'")->field('id')->find();if($current){$nav = D('Menu')->getPath($current['id']);$nav_first_title = $nav[0]['title'];//获得当前url的名称foreach ($menus['main'] as $key => $item) {if (!is_array($item) || empty($item['title']) || empty($item['url']) ) {$this->error('控制器基类$menus属性元素配置有误');}if( stripos($item['url'],MODULE_NAME)!==0 ){//如果url中没有模块名,则添加模块名$item['url'] = MODULE_NAME.'/'.$item['url'];}// 判断用户是否有主菜单权限if ( !IS_ROOT && !$this->checkRule($item['url'],AuthRuleModel::RULE_MAIN,null) ) {unset($menus['main'][$key]);continue;//继续循环}// 获取当前主菜单的子菜单项if($item['title'] == $nav_first_title){$menus['main'][$key]['class']='current';//生成child树$groups = M('Menu')->where("pid = {$item['id']}")->distinct(true)->field("`group`")->select();//获得组名称,如扩展if($groups){$groups = array_column($groups, 'group');}else{$groups =   array();}//获取二级分类的合法url$where          =   array();$where['pid']   =   $item['id'];$where['hide']  =   0;if(!C('DEVELOP_MODE')){ // 是否开发者模式$where['is_dev']    =   0;}$second_urls = M('Menu')->where($where)->getField('id,url');//获得某个菜单的所有子菜单if(!IS_ROOT){// 检测菜单权限$to_check_urls = array();foreach ($second_urls as $key=>$to_check_url) {if( stripos($to_check_url,MODULE_NAME)!==0 ){$rule = MODULE_NAME.'/'.$to_check_url;}else{$rule = $to_check_url;}if($this->checkRule($rule, AuthRuleModel::RULE_URL,null))$to_check_urls[] = $to_check_url;}}// 按照分组生成子菜单树foreach ($groups as $g) {$map = array('group'=>$g);if(isset($to_check_urls)){if(empty($to_check_urls)){// 没有任何权限continue;}else{$map['url'] = array('in', $to_check_urls);}}$map['pid'] =   $item['id'];$map['hide']    =   0;if(!C('DEVELOP_MODE')){ // 是否开发者模式$map['is_dev']  =   0;}$menuList = M('Menu')->where($map)->field('id,pid,title,url,tip')->order('sort asc')->select();$menus['child'][$g] = list_to_tree($menuList, 'id', 'pid', 'operater', $item['id']);}if($menus['child'] === array()){//$this->error('主菜单下缺少子菜单,请去系统=》后台菜单管理里添加');}}}}// session('ADMIN_MENU_LIST'.$controller,$menus);}return $menus;}

onethink学习之动态扩展菜单相关推荐

  1. java数据库动态树形菜单_bootstrap treeview树形菜单 动态扩展 连数据库

    二话不说,先来看效果图: 呃呃,虽然不是很美观......不过功能实现就好啦~ 数据库模型是这样的: 我做了什么工作呢? 简单解释一下,就是通过查数据库,把上面的数据查出来,每一行数据封装成为一个节点 ...

  2. 文件和存储管理学习笔记-动态磁盘管理

    Server 2008 R2 文件和存储管理学习笔记-动态磁盘管理 基本磁盘是包含基本分区.扩展分区或逻辑驱动器的一种物理磁盘 动态磁盘提供了基本磁盘不提供的一些高级功能,创建无限数量卷.跨越多个磁盘 ...

  3. bootstrap treetable 树形网格,动态扩展,连数据库

    二话不说,先看看效果图: 1.先来看写死的: 展开前~~ 展开后~~ 怎么实现呢? 先new 一个jsp文件,导入几个包,编写html代码,编写js代码,一个文件搞定! 1 <%@ page l ...

  4. 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016

    记录一个咸鱼大学生三个月的奋进生活016 复习Java(学生信息管理系统04权限管理和动态挂菜单功能) 改写MainFrame的构造方法 新增LoginFrame的验证登录是否成功的代码 新增Logi ...

  5. 汉堡造型的动态导航菜单,非常有意思

    大家好,今天给大家介绍一款,汉堡造型的动态导航菜单,非常有意思(图1).可以在餐饮场景使用,送给大家哦,获取方式在本文末尾. 图1 点击汉堡中间"MENU",汉堡就会张开,显示菜单 ...

  6. Vue开发实例(12)之实现动态左侧菜单导航

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  7. Spring Security 实现动态权限菜单方案(附源码)

    点击关注公众号,实用技术文章及时了解 系统权限管理 1.前言 在实际开发中,开发任何一套系统,基本都少不了权限管理这一块.这些足以说明权限管理的重要性.其实SpringSecurity去年就学了,一直 ...

  8. 计算机一级ps2019,2019年计算机一级考试PS基础学习点子:PS菜单中英文对照表.docx...

    2019 年计算机一级考试 PS 基础学习点子: PS 菜单中英文对照表 PS菜单中英文对照表 一.File New 2.Open 3.Open As 4.Open Recent Close 6.Sa ...

  9. 学习 PHP SOAP 扩展的一些笔记

    对 SOAP 的相关学习就先告此一段落,这是最后一篇文章用来记录下学习过程中的一些笔记和心得. 前面三篇文章分别是: <SOAP 介绍> <SOAP Web 服务介绍> < ...

最新文章

  1. mysql 简单优化规则
  2. 斐波那契博弈(证明+结论)
  3. 在Spring Rest模板中跳过SSL证书验证
  4. c盘users的用户名怎么改_做完这几个操作,我从C盘中清理了30G垃圾文件
  5. STM32的I2C主从机通信
  6. Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
  7. Rsync、Inotify-tools简介
  8. 那年学过的Oracle笔记
  9. bzoj 1687: [Usaco2005 Open]Navigating the City 城市交通(BFS)
  10. java驱动刷机_ProductTool(炬力芯片刷机工具+驱动) v5.46 中文安装免费版
  11. Java实体类与数据库表映射关系
  12. 单片机炫彩灯实训报告_单片机实验报告一-流水灯实验
  13. 第二章.物理层:2.6宽带接入技术
  14. MS-TCN: Multi-Stage Temporal Convolutional Network for Action Segmentation
  15. 【新书速递】Unity AR/VR 开发必知必会
  16. 客户贷款逾期预测[2]-svm和决策树模型
  17. DVM和ART的区别详解
  18. 分享三个可以在家做的正规兼职工作,看到就是赚到
  19. 从一台 Windows 10 上共享文件夹到Docker中的Volume卷
  20. 给大家讲个笑话,拿了个offer,因为体检查出脂肪肝,公司把我拒绝了!

热门文章

  1. 计算权证与股票收益率
  2. thinkphp5 导入/导出 Csv文件
  3. 【行研报告】2021年中国手机游戏行业研究报告—附下载
  4. jQuery EasyUI 1.3 中文文档
  5. Python抓取花瓣网高清美图
  6. (三行正则表达式) 编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。
  7. 刘德华要我做地下夫人 喻可欣说刘德华不是负心汉(图)
  8. 刘德华北京演唱会在线观看
  9. superset使用教程(2)
  10. 自动脚本引流怎么样?脚本引流靠谱吗?