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

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

OT版本:1.0.131218

一. 左侧菜单不显示

二. 左侧菜单不高亮

三. 顶部导航高亮错误

正文:

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

onethink左侧菜单不显示
onethink左侧菜单不显示

出现的原因:

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

解决方案:

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

onethink左侧菜单不显示解决方案
onethink左侧菜单不显示解决方案

原理:

  1. 代码位置:左侧菜单都是从数据库读出来的,前端源码从Application/Admin/View/Public/base.html的53行开始,后台读取实现的方法是Application/Admin/Controller/AdminController.class.php中的第240行getMenu()方法。

  2. 真正开始获取菜单是从判断if($current)开始的,获取方法就是先通过url获得当前导航,然后通过导航id获得菜单。

 

二. 左侧菜单不高亮

onethink左侧菜单不高亮
onethink左侧菜单不高亮

出现的原因:

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

onethink菜单不高亮实现方法
onethink菜单不高亮实现方法

解决方案:

在页脚添加以下代码:

原理:

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

 

三. 顶部导航高亮错误

onethink顶部导航高亮问题
onethink顶部导航高亮问题

出现的原因:

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

解决方案:

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

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

onethink导航高亮问题解决方案
onethink导航高亮问题解决方案

《『ONETHINK』后台导航及菜单原理》有6个想法

    1. 不显示左侧菜单的话是没有在菜单里添加相应的项。到菜单里添加就可以了。链接要写到方法。如:Product/index

  1. 左侧菜单不高亮

    原来是将edit页面最下面的js: highlight_subnav(‘{:U(‘index’)}’); 里面的index改成左侧菜单高亮的那个U函数解析的URL或者外链,例如我的是Picture/picture,换成小写的那个picture。

  2. 我的二级导航栏能显示,但是一点击所有的导航栏都不显示了怎么回事,而且只有几个能正常显示

发表评论

电子邮件地址不会被公开。