thinkphp框架onethink后台支持三级菜单

onethink后台支持三级菜单,CMS管理后台1.0版本本身不支持三级菜单,稍加改动,即可支持无限级分类

/**

* 获取控制器菜单数组,二级菜单元素位于一级菜单的'_child'元素中

* @author 朱亚杰

*/

final public function getMenus($controller=CONTROLLER_NAME){

// $menus = session('ADMIN_MENU_LIST'.$controller);

$flag=false;//是否开启menu三级菜单

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(); //设置子节点

//高亮主菜单

$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'];

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 ){

$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');

$third_urlss=array();

if(!empty($second_urls) && $flag){

foreach($second_urls as $key=>$v){

$wheres = array();

$wheres['pid'] = $key;

$wheres['hide'] = 0;

if(!C('DEVELOP_MODE')){ // 是否开发者模式

$wheres['is_dev'] = 0;

}

$third_urls[] = M('Menu')->where($wheres)->getField('id,url');

foreach($third_urls as $vv){

foreach($vv as $key=>$vs){

$third_urlss[$key]=$vs;

}

}

}

}

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;

}

if(!empty($third_urlss) && $flag){

foreach ($third_urlss as $key=>$to_check_urlss) {

if( stripos($to_check_urlss,MODULE_NAME)!==0 ){

$rules = MODULE_NAME.'/'.$to_check_urlss;

}else{

$rules = $to_check_urlss;

}

if($this->checkRule($rules, AuthRuleModel::RULE_URL,null))

echo $rules."
";

$to_check_urlsss[] = $to_check_urlss;

}

}

}

// 按照分组生成子菜单树

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(!empty($menus['child'][$g]) && $flag){

foreach($menuList as $key=>$v){

$maps['pid'] = $v['id'];

$menuLists = M('Menu')->where($maps)->field('id,pid,title,url,tip')->order('sort asc')->select();

$menus['child'][$g][$key]['ttt'] = list_to_tree($menuLists, 'id', 'pid', 'operater', $v['id']);

}

}

}

if($menus['child'] === array()){

//$this->error('主菜单下缺少子菜单,请去系统=》后台菜单管理里添加');

}

}

}

}

// session('ADMIN_MENU_LIST'.$controller,$menus);

}

return $menus;

}

然后Public/base.html

<<

{// 动态扩展菜单 //}

{:extra_menu($_extra_menu,$__MENU__)}

{$key}

  • {$menu.title}

  • {$menus.title}

朱亚杰 php,thinkphp框架怎么做一个三级菜单?相关推荐

  1. ABP实践(5)-abp前端vue框架之IView实现三级菜单(博友需要特此分享)

    为响应博友想要知道三级菜单怎么实现本篇文章先介绍三级菜单的实现,后续再分享其他部分内容 1 修改菜单组件sidebarMenu.vue 图为原代码和修改后代码比对 修改前后的源码如下 <styl ...

  2. WSTMart多商户商城跟随thinkphp框架升级到5.0.3

    THINKPHP最近是喜闻不断,先是在大好中秋给PHP 开发者最好的礼物,推出了5.0正式版,然后在国庆前推出5.0.1版本,继而在程序员节发布5.0.2,双11又推出了新的版本5.0.3 ... . ...

  3. MUI框架-05-用MUI做简单App界面

    MUI框架-05-用MUI做一个简单App MUI 是一个前端框架,前端框架就像 Bootstrap,EasyUI,Vue ,为了做 app 呢,就有了更加高效的 MUI,我觉得前端框架有很多,也没有 ...

  4. php tp框架做选中删除,关于thinkphp框架实现删除和批量删除的分析

    这篇文章主要为大家详细介绍了thinkPHP框架实现删除和批量删除的相关资料,需要的朋友可以参考下 本文实例讲一下如何用thinkphp实现数据的删除和批量删除吧. 预期效果图: 原谅博主对照片的处理 ...

  5. 从ThinkPHP框架核心讨论C、E、G、L、T、I、N...等函数

    如果只是从了解怎么用这几函数的角度看,直接看官方发布的文档即可!但是要了解这些函数是怎么被ThinkPHP框架定义调用的,那需要另外一番讨 论了.还好,ThinkPHP官方在源码力做了很好的注释,通过 ...

  6. thinkphp 框架自动加载原理_ThinkPHP5分析Part 1 基本框架流程

    ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 ...

  7. ThinkPHP 框架培训资料

    2019独角兽企业重金招聘Python工程师标准>>> ┎━ThinkPHP 框架系统目录 ┃ ┝ ThinkPHP.php 系统公共文件 ┃ ┝ Common 公共文件目录 ┃ ┝ ...

  8. thinkphp框架使用心得

    接触的第一个PHP框架就是TP,在使用的了一段时间后就放弃了,说实话TP的弊端挺多,之后又接触laravel框架,慢慢的就爱上laravel这个框架了.这段时间由于公司的原因,又不得不使用thinkp ...

  9. 【PHP ThinkPHP框架】小bug汇总[更新]

    目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 5.IF标签比较两个变量 6.eq标签比较两个变量 7.新增信息或者修改信息的自动验证和自动填充 8. ...

最新文章

  1. torch.full()简介
  2. H5跟ios、android交互跟数据对接
  3. 皮一皮:现在当爹妈的不容易...
  4. Linux系统颜色默认表示的文件类型
  5. 古诗文网页版html,古诗文网古诗文经典传承
  6. sql trim()函数去掉两头空格
  7. grunt之Gruntfile(1)
  8. spring 使用XML配置开发Spring AOP
  9. linux急救模式_抢救Linux:我如何将组织介绍给Linux
  10. 【hive】hive(hive cli)中显示列名,不带表名
  11. javaweb--HTTP状态码
  12. JavaScript 进阶问题列表
  13. html文档的三大元素,html文件构成-HTML文档的三大组成元素不包括?HTML文档的三大组成元素不包 爱问知识人...
  14. 暗时间--BY刘未鹏
  15. 桌面文件丢失如何找回
  16. 搜索及代码在GitHub上查重小技巧
  17. macOS 10.14配置APUE环境
  18. 点陶极速版《隐私政策》
  19. Java关键字详解this、private、static、super、extends继承、instanceof、final、abstract、interface、implements、enum...
  20. 真正的手机密码大全!

热门文章

  1. 串行 RapidIO接口介绍
  2. 构建磷脂双分子层(一)
  3. 反渗透设备:反渗透纯净水处理设备特点
  4. cpc按点击计算怎么算_什么是CPC(每次点击费用)?
  5. Docker Daemon
  6. return true return false 的区别
  7. Ping工具ICMP报文学习
  8. Java基础及大数据视频
  9. SqlServer——数据库恢复模式(Recovery model)及备份策略
  10. vsmoon 考核项目复现