关于禅道二次开发的分享

作者:轻易科技知行研发部 - 王想

为适应公司内部使用禅道平台,我参与的团队在现有版本上进行了二次开发。
首先,感谢开发禅道平台的原创团队。
因公司需要,本人学习了禅道的框架及使用,有了一些自己的感受,希望这篇博客,对大家以后开发禅道有所帮助。:)

一、学习禅道-个人看法

  1. 好的地方
    1.1. 取消了命名空间,使用传统的自动加载
    1.2.跨模块调用 $this->loadModel($moduleName)、$this->app->loadClass('pager')、$this->app->loadLang($moduleName);
    1.3.大量内部类 stdClass() 的使用
    1.4.前端类(可以直接使用禅道内部封装好的类,特别方便)
    1.5.方便的从数据库获取数据。比如: $this->app->user->realname 获取 zt_user 表的realname字段
  2. 不好的地方
    2.1.大量的配置文件和全局变量
    2.2.部分变量的声明不明确
    2.3.跨模块调用虽然减少了代码的冗余,将各模块关联起来,但是当开发的时候,大量的加载其它模块使代码看起来很混乱(真的有点头疼)

二、学习禅道-重要模块

1.common 模块
此 模块下zh_cn.php文件可以配置所有的菜单(顶级菜单、模块菜单)。在menuOrder.php 文件中进行菜单的位置布置。
例如:

 新增主菜单:$lang->menu->procedure = '流程|procedure|index';`添加副菜单: `$lang->procedure = new stdClass();`$lang->procedure->menu = new stdClass();$lang->procedure->menu->list = array('link' => '%s', 'fixed' => true);$lang->procedure->menu->story = array('link' => '需求|procedure|story|productID=%s', 'subModule' => 'story');


2.group模块(权限问题)
2.1.问题描述:
新建的菜单和功能模块,只在admin下可见,当其他普通用户登录时均不可见。
2.2.解决方案:
所有的模块、方法和菜单,都需要在该模块下进行配置
解决1:禅道页面组织菜单进行权限操作,并设置可见,退出当前账号重进,未解决
解决2:
http://www.51testing.com/html/11/n-3576111.html

具体操作及注意事项:
例如:在group/lang/resource.php文件中(index、hello均为teprocess 模块下新建的方法,因此需要在group模块下分配权限)

> $lang->resource->teprocess = new stdClass();
> $lang->resource->teprocess->index = 'index';
> $lang->resource->teprocess->hello = 'hello';
> $lang->teprocess->methodOrder[5] = 'index';
> $lang->teprocess->methodOrder[10] = 'hello';

说明: 在这里配置之后, admin用户可对 teprocess 的 index、hello 方法设置访问权限,其它方法不能设置访问权限;
注意:配置完成后,在权限配置页不会显示相应方法的名字等信息会显示 [] ,因此还需要在相应模块下的lang/zh-cn.php 下对所有方法配置语言包。

   > $lang->teprocess->index = 'teprocess首页';> $lang->teprocess->hello = '欢迎页';

3.block模块

3.1block模块的使用:
①首先,在需要使用block的view页面 添加一下代码 :

<?php echo $this->fetch('block', 'dashboard', 'module=teprocess')?>

②区块数据的获取,在block/control.php 中添加:

public function printUserBlock(){$this->session->set('userList', $this->server->http_referer);$this->view->users = $this->loadModel('teprocess')->getAllUser();
}

③在block/lang/zh-cn.php文件里,配置当前页面可以创建的区块:

  $lang->block->modules['teprocess'] = new stdClass();$lang->block->modules['teprocess']->availableBlocks = new stdClass();$lang->block->modules['teprocess']->availableBlocks->user = '用户列表';

三、学习禅道-重要的便利方法及常用第三方插件

1.setMenu($values,$key); // 设置菜单栏的 url
主要是对在common/zh_cn.php文件配置的菜单导航 %s 进行替换,生成正确的 url,此方法可以在任意模块使用,无需进行大的改动。
2.ajaxGetDropMenu($id, $module, $method, $extra); // 设置生成下拉菜单
在view层创建 ajaxgetdropmenu.html.php
可以在任意需要的模块使用该方法, 只需要修改小部分代码
3.富文本框的使用:
①view层:textarea($id, $value, $attrib);
例如:<?php echo html::textarea('desc', '', "rows='6' class='form-control'")?>
②框架提供富文本的使用只有 simpleTools、bugTools、fullTools 基本的功能选择,没有对富文本的大小的调节和读写模式的控制,这三种不同的选择,主要是针对富文本框最上面的工具栏功能的多少来自由定义。
例如:在相应模块的 config.php 添加:
$config->procedure->editor->requirementreview = array('id'=>'desc', 'tools'=>'simpleTools');
4.tablesorter插件
①在首页引入tablesorter.html.php文件,并在table标签和th标签中,加入特定的类名,即可完成排序的功能。

②加入特定的类名,即可完成正序、倒序功能。
5.分页
①在model中调用pager对象

②在control中将page对象赋值给模板

③view层,index.html.php中显示分页,调用框架自带的show()方法,其中show()方法有两个参数,$align: left, center, right,默认是居右对齐。$type: full|short|shortest,默认是full,可以省略不写。

四、遇到的坑

一定要注意框架的命名规则,主要指大小写的问题,比如,view层的命名只能是小写字母,小写字母,小写字母,重要的事情说三遍!!!

关于禅道二次开发的分享相关推荐

  1. 禅道二次开发发送邮件功能

    2019独角兽企业重金招聘Python工程师标准>>> 禅道默认在BUG和任务 修改,指派 的时候会发送邮件给默认的接收人 但是其他模块就没有对应的开发配置.如果有发信的需求,就要手 ...

  2. 全面使用禅道做敏捷开发的规范化管理分享

    http://www.zentao.net/dynamic/80027.html 作者:李士心 来源:https://www.zhihu.com/question/21518108/answer/96 ...

  3. Workbench二次开发技术分享

    之前我发过的关于Workbech二次开发的技术ACT,ACT主要是用来对workbench进行一些横向的开发(诸如workbench现有的载荷类型已经满足不了你的需求,你可以利用ACT技术扩展载荷类型 ...

  4. 禅道 php api,禅道 Rest API 开发

    在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统. 但是,只要你的系统运行在 PHP 5.3及以上的环境,在 ...

  5. 禅道 Rest API 开发

    在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统. 但是,只要你的系统运行在 PHP 5.3及以上的环境,在 ...

  6. Revit 二次开发实例分享

                                                                 叶雄进 Joe Ye Autodesk 2010/9/1     Autode ...

  7. 蝉道二次开发与钉钉机器人对接

    一.需求及分析过程 痛点:蝉道中单据(如:bug)填写不规范,需要筛选数据后再大量时间与当时人沟通,费时费力,如果设置为必填字段,会对其他业务线造成阻碍,只能单独拉取并通知相关人员. 需求:将特定项目 ...

  8. Revit二次开发知识分享(十四) 选择轴网快速生成标注

    这次分享的是一个小功能.选择几根相互平行的轴网,然后快速生成标注,内容仅提供学习和参考,延展性很大,可自行开发.上代码Just Do It~~ UIDocument uidoc = commandDa ...

  9. Revit二次开发知识分享(十七)梁板柱开洞的使用

    下面使用的API全是2019版本的API噢~~ 开洞的方法是RevitAPI中直接提供的(如下图),里面一共有四个创建的重载方法. 1.给梁,柱子和撑杆来开洞的,现在也仅支持XYZ三个方向上的开洞. ...

最新文章

  1. 医 系统 springboot搜索到的spring boot 的javaweb项目
  2. mv命令(移动和重命名)
  3. Linux中的用户和组
  4. python3怎样交换数字顺序_python中怎么交换列的顺序
  5. 用vscode编写静态页面_开发中实用的VSCode插件推荐
  6. js父元素获取子元素img_css,前端_父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?,css,前端 - phpStudy...
  7. ruby on rails 之图片压缩
  8. rust怎么用items刷东西_rust服主怎么刷东西 | 手游网游页游攻略大全
  9. Facebook反垃圾实践:人工治理与机器算法齐飞
  10. mysql passwor authen_Navicat连接虚拟机的MySQL时 提示“Password authentication failed”
  11. c 怎么更改计算机的默认打印机,C#Winfrom系统打印机调用/设置默认打印机
  12. python selenium清除缓存_SeleniumPython:无法清除chrome浏览器缓存
  13. vbs打开网页并全屏
  14. 自制homekit开关
  15. 如何快速构建千人规模的数字化研发管理系统
  16. 程序员编程艺术第一~三十八章集锦与总结,及Github地址、PDF下载
  17. [论文分享] SoK: A Survey Of Indirect Network-level Covert Channels
  18. 游戏运营全过程剖析,游戏开发,游戏运营,游戏推广问题分析
  19. 《自然语言处理学习之路》05 新闻分类任务实战
  20. MFC实战篇——分页功能

热门文章

  1. 关于编辑器EditPlus
  2. 码云团队如何使用码云?
  3. 数据页和数据行(翻译)
  4. 数据交换格式与SpringIOC底层实现
  5. 生产进度管理系统为制造管理提供较完善的解决方案
  6. 可升级鸿蒙的设备,华为鸿蒙即将到来,华为终于“出手”了!哪些机型可升级? - 王石头...
  7. “华为杯”研究生数学建模竞赛2005年-【华为杯】D题:仓库容量有限条件下的随机存贮管理问题(附获奖论文和matlab代码)
  8. 项目质量管理全部精华看这篇就够了
  9. H3C交换机DHCP Snooping抑制局域网内非法dhcp
  10. 在Linux Mint上玩转蓝牙机械键盘