NO.168 如何做禅道二次开发(4):如何登记菜单

Wesley13
• 阅读 631

扩展禅道遇到的一个问题就是如何将自己增加的功能登记到菜单中,本篇文章来讲述如何来实现这个功能。

一、菜单的组成
禅道的导航菜单分为三个部分,顶部菜单、模块菜单、功能菜单。

NO.168 如何做禅道二次开发(4):如何登记菜单

二、菜单的定义
菜单的代码定义是在zentao/module/common/lang/zh-cn语言文件中。我们来看下主菜单的定义。
2.1 主导航菜单的定义
80 $lang->menu->my = ' 我的地盘|my|index';
81 $lang->menu->product = '产品视图|product|index';
82 $lang->menu->project = '项目视图|project|index';
83 $lang->menu->qa = '测试视图|qa|index';
我们来看下代码的含义:83 $lang->menu->qa = '测试视图|qa|index';
这行代码定义了测试视图的代码,其中的menu->qa定义的是菜单的键值,可以根据实际的模块定义。后面是使用竖线分开的三个参数,分别是菜单的文本,对应到模块和方法。这句话就表示
要定义一个顶级菜单,文本是“测试视图”,链接到qa模块的index方法。

2.2 模块菜单的定义
我们以产品视图的模块菜单为例:
144 $lang->product->menu->list = '%s';
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');
158 $lang->productplan->menu = $lang->product->menu;
159 $lang->release->menu = $lang->product->menu;
这几行代码定义了产品视图模块的模块菜单,这里面出现了一些新的定义方法:
2.2.1 使用数组来定义链接
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
这行代码对链接进行定义的时候,使用了数组,分别定义了两个元素,link和subModule。其中link多增加了一个参数字段:productID=%s,代表产品视图的“需求”菜单会链接到product模
块的browse方法,传递的参数是productID=%s,其中的%s会被替换成当前的产品id。
2.2.2 使用subModuel来定义子模块
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
subModule定义的是它的子模块,这个需要是用来保持菜单高亮使用。这样当访问到story模块的时候,还会保持“产品视图”这个定义菜单高亮。
2.2.3 使用alias来定义方法别名
151 $lang->product->menu->view = array('link' => '概况|product|view|productID=%s', 'alias' => 'edit');
这个地方的alias代表product的edit页面和product的view页面是相同的,这样当编辑产品的时候,“概况”菜单还是会保持高亮的。
2.2.4 定义菜单的位置
所有的菜单默认都是显示在左侧的,如果需要将菜单显示在右侧,则需要定义它的float参数。
155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');
通过设置float参数,可以定义这个新增产品的链接显示在页面的右侧。

2.3 功能菜单的定义
功能菜单是在每一个模块的视图文件里面打印的,其扩展方法和视图的扩展相同,后面会讲到这一点。

三、菜单顺序的定义
前面讲述的是禅道菜单的定义,下面来讲下禅道菜单顺序的定义。在common/lang/下面有一个menuOrder.php的文件,在这个文件中定义了每个菜单的显示顺序。
/* Sort of main menu. */
$lang->menuOrder[5] = 'my';
$lang->menuOrder[10] = 'product';
$lang->menuOrder[15] = 'project';
$lang->menuOrder[20] = 'qa';
$lang->menuOrder[25] = 'doc';
$lang->menuOrder[30] = 'report';
$lang->menuOrder[35] = 'company';
$lang->menuOrder[40] = 'admin';
/* index menu order. */
$lang->index->menuOrder[5] = 'product';
$lang->index->menuOrder[10] = 'project';

四、如何将自己的页面登记到菜单中
了解了禅道的菜单机制之后,做扩展就非常容易了。我们来说下步骤:
1. 在module/common/ext/lang/zh-cn/下面创建一个文件,比如叫做abc.php(文件名可以任意定义)
2. 在这个文件中加上自己的菜单就好了,比如禅道专业版本中的版本库菜单:
$lang->menu->repo = '版本库|repo|browse';
$lang->menuOrder[21] = 'repo';
$lang->repo->menu->list = '%s' . $lang->arrow;
$lang->repo->menu->browse = array('link' =>'浏览|repo|browse|repoID=%s', 'alias' => 'diff, log, view, revision, showsynccomment');
$lang->repo->menu->settings = '设置|repo|settings|repoID=%s';
$lang->repo->menu->delete = array('link' => '删除|repo|delete|repoID=%s', 'target' => 'hiddenwin');
$lang->repo->menu->create = array('link' => '新增版本库|repo|create|', 'float' => 'right');

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
NO.161 如何做禅道二次开发(2):找到要修改的文件
要想对禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dpxz)进行修改,就必须知道对应的代码在什么地方。在了解了禅道的目录结构之后,我们来看下禅道的请求是如何对应到代码的。一、control方法的定位control方法是
Wesley13 Wesley13
2年前
NO.56 杭州汇云科技 禅道使用经验分享
关于禅道使用经验分享禅道项目管理(www.zentao.net(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dlixiao%26f%3Dos%26a%3Dblog))使用经验分享,欢迎大家一起来探讨关于禅道项目管理软件使用方面的问题。我
Stella981 Stella981
2年前
NO.159 集成禅道和git
禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dpxz%26f%3Dosc%26a%3Dblog)从5.0版本开始内置了git集成功能,把禅道的任务、Bug等与代码进行关联,方便用户查看。下面向大家讲解如何配置禅道集成git。
Wesley13 Wesley13
2年前
NO.76 禅道使用分享第八期:创维软件开发团队畅谈专业版
关于禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dlixiao%26f%3Dchangxiang%26a%3Dblog)使用经验分享 禅道(https://www.oschina.net/action/GoToLink?url
Wesley13 Wesley13
2年前
NO.83 禅道使用分享第十期:小开发团队里的大智慧。
关于禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%3Fu%3Dlixiao%26f%3Dos)使用经验分享禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.z
Wesley13 Wesley13
2年前
NO.80 禅道使用分享第九期:测试部门缺陷管理的新需求
关于禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%3Fu%3Dlixiao)使用经验分享禅道使用经验分享,欢迎大家一起来探讨关于禅道项目管理软件使用方面的问题。我们广泛的收集对禅道的看法和建议,充分了解广大用户使用禅道的具体情况和要求,进而不断完善
Stella981 Stella981
2年前
NO.33 禅道插件实例:创建bug时可以设置优先级字段
这个例子用来向大家展示如何使用禅道的扩展机制来对禅道进(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dlixiao%26f%3Dos%26a%3Dblog)行各种定制,而不用担心后续升级之后被覆盖。目标:在创建bug(https:/
Wesley13 Wesley13
2年前
NO.150 分享有礼!分享禅道使用经验,给禅道提建议,大奖等你拿
2014年,禅道开源版和专业版共发布了12个版本。禅道专业版推出了手机客户端和企业IM客户端(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2Fdynamic%2F79886.html%3Fu%3Dpxz%26f%3Dosc)。禅道最新发布了开源版6.
Stella981 Stella981
2年前
NO.158 集成禅道和svn
说明:svn集成功能配置会比较复杂,我们会尽量通过文档来帮助大家配置成功!如果实在配置不成功的,可以考虑找我们做收费技术支持。禅道(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dpxz%26f%3Dosc%26a%3Dblog)于2.2
Wesley13 Wesley13
2年前
NO.112 禅道使用分享第十八期:工作效率明显提高。
关于禅道使用经验分享禅道使用经验分享,欢迎大家一起来探讨关于禅道项目管理软件(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.zentao.net%2F%3Fu%3Dpanxianzhi%26f%3Dos%26a%3Dblog)使用方面的问题。我们广泛的收集对禅