『ONETHINK』后台导航及菜单原理

在使用OT的过程中,如果不了解后台的导航和菜单实现原理,将会遇到一些莫名其妙的麻烦,本文将讲解至今为止,我遇到的各种导航问题以及解决方案。


OT版本:1.0.131218

一. 左侧菜单不显示

二. 左侧菜单不高亮

三. 顶部导航高亮错误

正文:

一. 左侧菜单不显示(例:用户导航->新增用户组)

出现的原因:

没有在数据库中添加菜单项。

解决方案:

访问系统->菜单管理->用户->权限管理,新增“新增”字段(可参考菜单->系统中的新增方式)。

原理:

  1. 代码位置:左侧菜单都是从数据库读出来的,前端源码从Application/Admin/View/Public/base.html的53行开始,后台读取实现的方法是Application/Admin/Controller/AdminController.class.php中的第240行getMenu()方法。
  2. 真正开始获取菜单是从判断if($current)开始的,获取方法就是先通过url获得当前导航,然后通过导航id获得菜单。

 

二. 左侧菜单不高亮

出现的原因:

左菜单高亮的判断是通过Application/Admin/View/Public/base.html中/ 左边菜单高亮 /以下代码实现的(如下图),可以看出,官方是用了正则表达式判断url来实现的高亮,这样的灵活性很低,所以需要通过在需要高亮的页面添加addClass实现。

解决方案:

在页脚添加以下代码:

原理:

  1. 这行代码是通过标记class=’current’来实现导航高亮,用{:U(‘index’)}来找到应该高亮的父元素。

 

三. 顶部导航高亮错误

出现的原因:

顶部导航的高亮错误并不常见,但是需要找到解决方案也不太容易。因为我有一个控制器叫ProductCategory,而官方的分类控制器叫Category,源码是通过like关键字读取的数据库,所以读取Category的时候,就会读取到ProductCategory的菜单。

解决方案:

方法1. 改名字:将自己的名字改得和官方不同(后缀不相同才可以)。

方法2. 改代码:找到Application/Admin/Controller/AdminController.class.php中的getMenu()方法,去掉like查询的第一个%(这种方法可以解决导航高亮错误,但是会有什么后果现在还不知道,应该问题不大)