SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3644|回复: 0

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

[复制链接]
发表于 2016-9-14 16:05:06 | 显示全部楼层 |阅读模式
扩展禅道遇到的一个问题就是如何将自己增加的功能登记到菜单中,本篇文章来讲述如何来实现这个功能。
1 B; C1 e7 U; A# ?9 _* l6 A7 a
3 u8 @. W0 I' a( m, D5 w一、菜单的组成
# g& H# ~0 z" ], o4 q4 H' l禅道的导航菜单分为三个部分,顶部菜单、模块菜单、功能菜单。0 i/ Y8 Q% v) l
0 I# _$ @: @; u) _/ O( H
: j7 y1 Z' X& a
二、菜单的定义
/ _& D. s" d/ p3 r( n: {菜单的代码定义是在zentao/module/common/lang/zh-cn语言文件中。我们来看下主菜单的定义。4 p8 o  a' k8 \. q! Z) c
2.1 主导航菜单的定义- @) ^9 ?0 H3 M0 w
80 $lang->menu->my = ' 我的地盘|my|index';
. u: R; F7 Q8 O5 I% i, i& _/ X81 $lang->menu->product = '产品视图|product|index';3 F2 g/ k9 g4 o$ `% U
82 $lang->menu->project = '项目视图|project|index';3 `' A2 @; E; |  e  S! ^
83 $lang->menu->qa = '测试视图|qa|index';
# L, C3 ^- B6 K1 P我们来看下代码的含义:83 $lang->menu->qa = '测试视图|qa|index';, a8 F7 `1 A: X+ w2 h2 w8 o
这行代码定义了测试视图的代码,其中的menu->qa定义的是菜单的键值,可以根据实际的模块定义。后面是使用竖线分开的三个参数,分别是菜单的文本,对应到模块和方法。这句话就表示要定义一个顶级菜单,文本是“测试视图”,链接到qa模块的index方法。
- D* l9 B) Q7 _' {- i% N
, P' G" `/ ?2 Z; s2.2 模块菜单的定义! Z8 s: P4 z- [( |
我们以产品视图的模块菜单为例:7 d% J4 I7 [" ]$ Y4 ~$ ^, F
144 $lang->product->menu->list = '%s';
, P4 w# V8 Q: l4 x$ N$ d6 x145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');! E" l% N3 k9 V3 ]
155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');
. m- J8 C1 y3 t& _/ n) G158 $lang->productplan->menu = $lang->product->menu;/ `: y  r- c$ d
159 $lang->release->menu = $lang->product->menu;2 b5 N# `# R; }
这几行代码定义了产品视图模块的模块菜单,这里面出现了一些新的定义方法:) J" `/ T$ W- n3 S/ z
2.2.1 使用数组来定义链接! X! v- x: |; N- |- t
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
) [0 k( F5 T6 B2 }5 t3 \1 s5 _这行代码对链接进行定义的时候,使用了数组,分别定义了两个元素,link和subModule。其中link多增加了一个参数字段:productID=%s,代表产品视图的“需求”菜单会链接到product模块的browse方法,传递的参数是productID=%s,其中的%s会被替换成当前的产品id。
" c) ?( @& E1 l! F8 ]% R$ b2.2.2 使用subModuel来定义子模块" `. n, H- D) l! U3 e4 W" j  B
145 $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
/ X; P/ _" t' T$ B0 dsubModule定义的是它的子模块,这个需要是用来保持菜单高亮使用。这样当访问到story模块的时候,还会保持“产品视图”这个定义菜单高亮。3 `; U9 N  O- G; x7 g1 O- y
2.2.3 使用alias来定义方法别名1 n: V* _0 r6 L2 O
151 $lang->product->menu->view = array('link' => '概况|product|view|productID=%s', 'alias' => 'edit');$ Y! B% V; @" u8 ]6 o& X3 W
这个地方的alias代表product的edit页面和product的view页面是相同的,这样当编辑产品的时候,“概况”菜单还是会保持高亮的。
8 {4 r* F% e4 @! L# ~. z( L2.2.4 定义菜单的位置8 E9 Z! g3 G9 B! g
所有的菜单默认都是显示在左侧的,如果需要将菜单显示在右侧,则需要定义它的float参数。  s/ @5 ^& x/ r8 i( H2 _+ b
155 $lang->product->menu->create = array('link' => ' 新增产品|product|create', 'float' => 'right');
. H1 e. }, w9 N5 j: A- n通过设置float参数,可以定义这个新增产品的链接显示在页面的右侧。
/ g5 b0 Q: _5 T; L8 N; a
& h2 w( h- b' y/ i& |2.3 功能菜单的定义& u! o7 I% Z1 c" f/ @" D# D
功能菜单是在每一个模块的视图文件里面打印的,其扩展方法和视图的扩展相同,后面会讲到这一点。" d( B: h7 `( A+ g  ]
: U( p" s7 E& c* V
三、菜单顺序的定义
- @8 I4 ?  h6 ~0 J- E' e- @前面讲述的是禅道菜单的定义,下面来讲下禅道菜单顺序的定义。在common/lang/下面有一个menuOrder.php的文件,在这个文件中定义了每个菜单的显示顺序。: A/ O5 J/ T8 y. t3 v. ^8 B% Y
/* Sort of main menu. */
/ @- u6 `/ U1 F% t0 o6 l$lang->menuOrder[5] = 'my';
# @/ B; A8 d- r/ z5 R9 j$lang->menuOrder[10] = 'product';# Y; Z5 C4 U6 n; C$ @$ U. N) Z
$lang->menuOrder[15] = 'project';* @/ F; B8 p: n; R4 ~% L8 ?
$lang->menuOrder[20] = 'qa';& ~6 x$ Q# }9 b7 ?5 q" M
$lang->menuOrder[25] = 'doc';
. S1 ~+ V5 f  l. u0 k4 c$lang->menuOrder[30] = 'report';
% A7 s* a' L7 ^5 F" ~$lang->menuOrder[35] = 'company';8 I. f% H# E' c: J6 c( E  C2 |
$lang->menuOrder[40] = 'admin';
6 G0 k3 l. Q2 t8 N: M/* index menu order. */
, v' @/ h4 F. p* {3 q$lang->index->menuOrder[5] = 'product';' X1 R' f6 n. i; c% i" {
$lang->index->menuOrder[10] = 'project';: p; p) f5 R' O
: n* ?0 ?( p8 w. |% F0 O* e
四、如何将自己的页面登记到菜单中# Z( s7 z& z) V  @8 C
了解了禅道的菜单机制之后,做扩展就非常容易了。我们来说下步骤:% d1 H# E7 z4 k4 k+ @5 i
1. 在module/common/ext/lang/zh-cn/下面创建一个文件,比如叫做abc.php(文件名可以任意定义)
0 t- G2 ~0 v& h! N$ r2 Q& R! R2. 在这个文件中加上自己的菜单就好了,比如禅道专业版本中的版本库菜单:
+ ]0 b2 d/ N5 L! w/ W! C% q$lang->menu->repo = '版本库|repo|browse';9 V, K* {# E: ^0 D/ N! N6 R* _
$lang->menuOrder[21] = 'repo';
! e& s; M: J  }7 A) D5 U$lang->repo->menu->list = '%s' . $lang->arrow;
% w! a5 f, ]$ }. n& ]$lang->repo->menu->browse = array('link' =>'浏览|repo|browse|repoID=%s', 'alias' => 'diff, log, view, revision, showsynccomment');
  f+ P  u" t. ^, V$lang->repo->menu->settings = '设置|repo|settings|repoID=%s';- P5 @0 t, `6 ?" |3 K% u
$lang->repo->menu->delete = array('link' => '删除|repo|delete|repoID=%s', 'target' => 'hiddenwin');- n8 Y' m  E5 P
$lang->repo->menu->create = array('link' => '新增版本库|repo|create|', 'float' => 'right');4 B( R- v( S6 [& ]& U  G6 a

/ T& b  J& |# v+ v. }2 V% n

本帖子中包含更多资源

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

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

本版积分规则

关闭

SCMLife推荐上一条 /1 下一条

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

GMT+8, 2020-9-21 08:06 , Processed in 0.066352 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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