SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3183|回复: 0

[推荐] 如何做禅道二次开发(4):如何登记菜单

[复制链接]
发表于 2016-9-14 16:05:06 | 显示全部楼层 |阅读模式
扩展禅道遇到的一个问题就是如何将自己增加的功能登记到菜单中,本篇文章来讲述如何来实现这个功能。
8 j# P& v- P" B/ `; x
  h+ b+ Y+ `$ @2 R; H一、菜单的组成
0 N/ o  A. g" i: x3 `! Y% w禅道的导航菜单分为三个部分,顶部菜单、模块菜单、功能菜单。
1 V" u. Y! Y' V6 g% n1 a7 J+ K+ n8 P& s# q  i& x" |8 \0 T0 Q" i
/ i. z, H* G" E0 i! Q
二、菜单的定义
( C! H2 s( l0 k1 H" A  z菜单的代码定义是在zentao/module/common/lang/zh-cn语言文件中。我们来看下主菜单的定义。+ H$ \+ d2 B" c; M/ E: K5 g; f
2.1 主导航菜单的定义
; t2 \/ n% N3 o+ {9 d+ N80 $lang->menu->my = ' 我的地盘|my|index';
) b) c5 z5 h9 X81 $lang->menu->product = '产品视图|product|index';
4 l$ V- i. n# D82 $lang->menu->project = '项目视图|project|index';" a. v% Y. ]# A; J; R" L
83 $lang->menu->qa = '测试视图|qa|index';
& J) W; y( y) _+ j) n我们来看下代码的含义:83 $lang->menu->qa = '测试视图|qa|index';
+ l" f6 _6 ?, i: v( c* ~( h这行代码定义了测试视图的代码,其中的menu->qa定义的是菜单的键值,可以根据实际的模块定义。后面是使用竖线分开的三个参数,分别是菜单的文本,对应到模块和方法。这句话就表示要定义一个顶级菜单,文本是“测试视图”,链接到qa模块的index方法。
$ a8 f: B4 b! T. r/ W
( Q/ B' p" x1 {0 Q" z3 o# c2.2 模块菜单的定义) D; D- B6 K- E! J5 ~9 ?
我们以产品视图的模块菜单为例:
, S" d0 n3 p: y4 U! w( K  e' |" n3 n* Y144 $lang->product->menu->list = '%s';
% G4 N; m  j* L+ S( u145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
& F6 b3 M. T  B7 y4 v$ N/ ?155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');3 K3 N4 n$ n) o2 o2 g1 ~
158 $lang->productplan->menu = $lang->product->menu;
& S, }* E" y; U; |1 k& R) N159 $lang->release->menu = $lang->product->menu;
2 ^4 Q( X8 ]1 H, x* {# h这几行代码定义了产品视图模块的模块菜单,这里面出现了一些新的定义方法:
5 y5 l* w% F% e( t1 [  I" }2.2.1 使用数组来定义链接
! D$ s9 I, B3 J; Y3 y: t' I145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
4 O. y5 ]2 v6 B" h8 z7 ]9 e这行代码对链接进行定义的时候,使用了数组,分别定义了两个元素,link和subModule。其中link多增加了一个参数字段:productID=%s,代表产品视图的“需求”菜单会链接到product模块的browse方法,传递的参数是productID=%s,其中的%s会被替换成当前的产品id。! A) k/ H; g- e4 E) g4 q
2.2.2 使用subModuel来定义子模块! P6 o6 d; g" F* S2 H, j( N
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');8 g: K4 O+ m) S; H! ^7 p
subModule定义的是它的子模块,这个需要是用来保持菜单高亮使用。这样当访问到story模块的时候,还会保持“产品视图”这个定义菜单高亮。
5 F7 ]& ~* O( E' l& A1 X2.2.3 使用alias来定义方法别名
% _. V5 E2 y$ [, g  j7 W9 b6 h151 $lang->product->menu->view = array('link' => '概况|product|view|productID=%s', 'alias' => 'edit');5 \* V. D$ ~6 Q) P" T7 x" E# T
这个地方的alias代表product的edit页面和product的view页面是相同的,这样当编辑产品的时候,“概况”菜单还是会保持高亮的。0 Z. V7 Y! j$ d9 F& k# g* ?) m: W& S6 B
2.2.4 定义菜单的位置4 ~. Q- _: S4 F( E) H! F! T4 d
所有的菜单默认都是显示在左侧的,如果需要将菜单显示在右侧,则需要定义它的float参数。6 q, k8 X5 V& J
155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');; n( d) ]  `9 u9 w/ u
通过设置float参数,可以定义这个新增产品的链接显示在页面的右侧。2 y) v) x6 m, }8 W8 m+ F% C
6 F5 j' @7 j% T. a# w2 A8 s: H
2.3 功能菜单的定义
9 ^* E# Z- Q! ^6 [功能菜单是在每一个模块的视图文件里面打印的,其扩展方法和视图的扩展相同,后面会讲到这一点。
! `. I# D8 O" N. K7 f* j5 j( G
5 F* I3 N7 s+ `- n' b$ B三、菜单顺序的定义1 s+ [: m! m5 k* E5 g$ f
前面讲述的是禅道菜单的定义,下面来讲下禅道菜单顺序的定义。在common/lang/下面有一个menuOrder.php的文件,在这个文件中定义了每个菜单的显示顺序。
3 {6 f( K; t+ Z8 C! L1 Y' o/* Sort of main menu. */
) H% Z( ~! @" e8 {8 S$lang->menuOrder[5] = 'my';! X! {, Z& ?5 D- x  s  U
$lang->menuOrder[10] = 'product';
4 j) Q; |& O2 \8 z$lang->menuOrder[15] = 'project';
6 T0 r- v  k9 ^: L' \$lang->menuOrder[20] = 'qa';
' X  H# |2 @$ k4 p9 P3 ~4 u: d, A$lang->menuOrder[25] = 'doc';0 @* m0 K# G) J! i; Q- X
$lang->menuOrder[30] = 'report';: s& J4 B- {3 z
$lang->menuOrder[35] = 'company';
) R" ], K7 D& `* \; ^% ?$ R$ M" m7 o$lang->menuOrder[40] = 'admin';
+ n- o' b# ]& n8 B0 i/ |0 J/* index menu order. */
5 `1 A- D# q/ k) p; w$lang->index->menuOrder[5] = 'product';: b% ~! t- N' V' @# u' c$ x5 D
$lang->index->menuOrder[10] = 'project';
2 T  s9 h1 W  P: Y# b3 B
: K5 g6 t" B' l6 s% T四、如何将自己的页面登记到菜单中9 b" e2 K0 c* `4 W
了解了禅道的菜单机制之后,做扩展就非常容易了。我们来说下步骤:  |6 r( h1 K" ]
1. 在module/common/ext/lang/zh-cn/下面创建一个文件,比如叫做abc.php(文件名可以任意定义)5 q7 }/ S6 b8 r
2. 在这个文件中加上自己的菜单就好了,比如禅道专业版本中的版本库菜单:/ \' [, ]. v( l, D  ]+ N: b' e  |
$lang->menu->repo = '版本库|repo|browse';
4 v' k# g7 o- |$lang->menuOrder[21] = 'repo';+ ~% t$ h% Y9 r; h' ~
$lang->repo->menu->list = '%s' . $lang->arrow;
% w. N! }2 n; x9 \5 B& f' [0 Z' J& h4 t$lang->repo->menu->browse = array('link' =>'浏览|repo|browse|repoID=%s', 'alias' => 'diff, log, view, revision, showsynccomment');  S4 v% e: E" c# B& Q
$lang->repo->menu->settings = '设置|repo|settings|repoID=%s';/ t9 \5 v; g' T9 w8 W0 \9 n% {
$lang->repo->menu->delete = array('link' => '删除|repo|delete|repoID=%s', 'target' => 'hiddenwin');
3 j; L* }7 T" P, \1 M& ^( u& t$ p$lang->repo->menu->create = array('link' => '新增版本库|repo|create|', 'float' => 'right');" q3 F9 w; e  t7 y& ?3 K% n4 H, H
3 `  E8 d' ^" ^

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /5 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2019-12-16 21:12 , Processed in 0.096660 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表