如何登记菜单

2012-09-27 11:14:18    王春生    19320

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

一、菜单的组成

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

二、菜单的定义

菜单的代码定义是在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');

    评论列表
    小猪   2017/11/14 15:11
    请问想在例如项目----团队下面 添加功能菜单如何添加?
    王林   2017/11/14 17:11
    这个需要进行二次开发实现。
    二次开发可以参考一下文档:http://www.zentao.net/book/zentaopmshelp/225.html
    建议二次开发先熟悉一下zentaoPHP框架。
    也可以添加页面上方QQ,联系我们进行定制开发。
    张栋梁   2017/08/18 11:08
    1. 在module/common/ext/lang/zh-cn/下面创建一个文件,比如叫做abc.php(文件名可以任意定义)
    按照上面的扩展吧,但是不显示
    石洋洋   2017/08/18 11:08
    看一下php日志是否有错误记录?zentao(pro/pms)/config/my.php 中debug的值改成true 重新操作一下 看日志文件 zentao(pms/pro)/tmp/log/php开头的今天的文件有什么报错。
    阿灿烂   2017/05/02 15:05
    请问添加菜单后如何分配权限让普通用户也能显示?修改了zentao/module/group/lang/resource.php,子菜单有显示,但是模块怎么给普通用户使用!
    石洋洋   2017/05/02 15:05
    模块指的是什么内容?可以加 QQ: 1492153927 他会邀请加入禅道二次开发群,在群里就可以截图一下操作的位置,交流会方便一些。
    729500161   2017/02/21 18:02
    请问添加菜单后如何分配权限让普通用户也能显示?参考zentao/module/group/lang/resource.php,没看出来!
    石洋洋   2017/02/22 09:02
    加一下 QQ: 1492153927,他会邀请加入二次开发群,在群里交流一下。
    811429769   2017/02/21 15:02
    按照 四、如何将自己的页面登记到菜单中 怎么没有显示新加的菜单啊?
    石洋洋   2017/02/21 16:02
    用超级管理员登录查看一下是否存在,新加的功能是需要分配权限普通用户才能看到的,权限增加可以参考zentao\module\group\lang\resource.php
    jackal   2016/12/11 23:12
    请问 $lang->productCommon 是在哪个文件定义的啊?谢谢!
    春哥   2016/12/12 10:12
    你看下module/common模块下面。
    春哥   2016/12/13 08:12
    搜索下不就知道了?
    lcdd   2016/10/12 15:10
    请问字体在哪个文件中修改?
    王怡栋   2016/10/12 16:10
    禅道中字体需要修改css样式。
    lnln   2016/07/13 12:07
    想在禅道中加一个不需要登录就能访问的页面,要如何处理
    石洋洋   2016/07/13 13:07
    要放在禅道中的话就需要登录禅道,除非和禅道程序没有交互。
    晚天   2016/03/22 22:03
    点击顶级菜单中产品会默认进入模块菜单中的需求,如何设置(或修改代码)使得默认进入模块菜单中的项目?多谢多谢!
    春哥   2016/03/23 09:03
    common模块下面的语言里面有定义。
    xiii   2016/03/09 14:03
    $lang->product->menu->list = '%s'; 请问list表中的数据%s是在什么地方被替换的?
    石洋洋   2016/03/09 14:03
    看一下setmenu() 函数。


    发表评论
      评论通过审核后显示。
    浙ICP备12017616号
    蝉知1.6