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

    一、菜单的组成

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

    二、菜单的定义

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


    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.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(文件名可以任意定义)