多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[Trac 经验谈之(1)杂谈篇](http://blog.csdn.net/lanphaday/article/details/6609256) [Trac 经验谈之(2)杂谈篇补遗](http://blog.csdn.net/lanphaday/article/details/6658032) [Trac 经验谈之(3)工作流篇](http://blog.csdn.net/lanphaday/article/details/6620098) [Trac 经验谈之(4)报表篇](http://blog.csdn.net/lanphaday/article/details/6641391) [Trac 经验谈之(5)插件篇](http://blog.csdn.net/lanphaday/article/details/6654027) [Trac 经验谈之(6 完)插件篇补遗](http://blog.csdn.net/lanphaday/article/details/7100118) # Trac 经验谈之(5)插件篇 赖勇浩([http://laiyonghao.com](http://laiyonghao.com)) 如果说 ticket 是 Trac 的灵魂,那么把插件(plugins)称为 Trac 的血肉应不为过。因为这是使用的经验谈,所以 Trac 的插件机制原理什么的,我们就不谈了,就介绍一下我都有用哪些插件,这些插件的功能又是什么,解决了什么问题。 不过在这之前,还是需要先知道怎么查找、下载和安装插件。 Trac 的插件都在 [http://trac-hacks.org/](http://trac-hacks.org/) 网站上安家,所以去这里找插件就对了!里面的每个项目都有一个自己的页面,基本上下载、安装和配置都在上面写写清清楚楚的。一般可以选择下载 zip 格式的发布包,然后解压到某个目录下执行一下 python setup.py bdist_egg 把代码编译成 egg。再用管理员账号登陆 Trac,点击右上角的“管理(admin)”,在新页面选择左侧栏“一般(general)”下的“插件(Plugins)”链接,这“管理插件”页面右上角可以把之前编译好的 python egg 上传安装,然后编辑 trac.ini 文件进行配置即可。 接下来正式开始介绍插件,按体验和功能进行简单分类。 ### 体验 ### AutocompleteUsers 主页:[http://trac-hacks.org/wiki/AutocompleteUsersPlugin](http://trac-hacks.org/wiki/AutocompleteUsersPlugin),我现在使用的是 0.4.1 版本,它的作用是在输入属主或抄送的时候,以 Ajax 的风格即时提示用户名,这样只记住用户名的前面一两个字母就行啦。效果图: ![](http://trac-hacks.org/attachment/wiki/AutocompleteUsersPlugin/screenshot.png?format=raw) 还有一个可选的类似插件叫 TracAutoCompletePlugin,见:[http://trac-hacks.org/wiki/TracAutoCompletePlugin](http://trac-hacks.org/wiki/TracAutoCompletePlugin) ### CcSelectorPlugin 主页:[http://trac-hacks.org/wiki/CcSelectorPlugin](http://trac-hacks.org/wiki/CcSelectorPlugin)。虽然通过编辑 trac.ini 把 [ticket] 节加上 restrict_owner = true,可以实现属主的列表选择,但是对于中国人来说,要记住别人的用户名实在是太困难了,因为有些人是用英文名、有些人用拼音名、有些人姓在前面,有些人姓在后面,最后的方式莫过于能够通过真实姓名来选择。这个插件就是解决了这个问题,效果图: ![](http://trac-hacks.org/attachment/wiki/CcSelectorPlugin/cc_selector.png?format=raw) 我对 CcSelectorPlugin 进行了硬编码式地 hack,实现了对 owner 的选择,算是 Trac 在用户选择方面最完美的解决方案了,等我整理代码后,择日开源给大家使用。 ### BreadCrumbsNavPlugin 主页:[http://trac-hacks.org/wiki/BreadCrumbsNavPlugin](http://trac-hacks.org/wiki/BreadCrumbsNavPlugin),顾名思义,它的作用是解决用户想回到之前的页面却操作起来很麻烦的问题。启用这个插件后,在页面的右上角,就是登陆、设置等链接的那个地方,会多出一行链接,记录了你之前访问过的若干个页面,就像面包屑一样,找到“回家的路”。 ### DateFieldPlugin 主页:[http://trac-hacks.org/wiki/DateFieldPlugin](http://trac-hacks.org/wiki/DateFieldPlugin),通过一些设置,这个插件能够实现日期的可视化输入和校验,效果图: ![](image/56a5c4636312e.jpg) ### CustomFieldAdminPlugin 主页:[http://trac-hacks.org/wiki/CustomFieldAdminPlugin](http://trac-hacks.org/wiki/CustomFieldAdminPlugin)。自定义字段(custom fields)异常重要,很多体验提升的插件都是基于它的,如果你有兴趣去查看一下 Trac 的源代码,你会发现其实 Trac 在相当多的地方专门处理了 Custom Fields。这个插件提供了 Web 界面来管理自定义字段,比如增加、改变和删除等,而之前你需要直接编辑 trac.ini(这是一种危险的、容易出错的方式)。 ### 功能 ### TicketExtPlugin 主页:[http://trac-hacks.org/wiki/TicketExtPlugin](http://trac-hacks.org/wiki/TicketExtPlugin),通过这个插件,可以实现:1)根据 ticket 的类型使用不同的描述模板;2)能够通过 TracAdmin 页面可视化地定位模板;3)根据 ticket 的类型可以使能或禁用自定义字段。我们通过这个插件,定制了自己的 ticket 描述模板,很好地引导了初次接触 Trac 的用户,解决了他们“不知道怎么用”的问题。 ### TracWysiwygPlugin 主页:[http://trac-hacks.org/wiki/TracWysiwygPlugin](http://trac-hacks.org/wiki/TracWysiwygPlugin)。Trac 不被团队中的非程序员成员拒绝使用,很大的一个原因莫过于他们觉得 Wiki 语法需要学习,太难。这个插件可以在一定程度上缓解问题,达到了部分的“所见即所得”效果,基本上所有用户都安装了这个插件。 ### GraphvizPlugin 主页:[http://trac-hacks.org/wiki/GraphvizPlugin](http://trac-hacks.org/wiki/GraphvizPlugin)。所有 Unix 粉丝都对 Graphviz 如雷贯耳吧?这个插件实现了对 wiki 中 graphviz 程序的解释,让大家能够写文本的 Wiki,看图形的效果。例子: ~~~ {{{ #!graphviz digraph G { rankdir = "LR" GraphvizPlugin [ URL=GraphvizPlugin ] Trac [ URL="http://trac.edgewall.org/" fontcolor=red ] GraphvizPlugin -> Trac } }}} ~~~ 效果图: ![](https://box.kancloud.cn/2016-04-28_5721b38570384.png) 需要注意的是使用这个插件需要在机器上安装 graphviz 程序。 ### ChildTicketsPlugin 主页:[http://trac-hacks.org/wiki/ChildTicketsPlugin](http://trac-hacks.org/wiki/ChildTicketsPlugin)。这个插件功能强大,不过简单来说就是给 Trac 带入子任务单的概念。可以设置某个类型的任务单是否能够拥有子任务单,也可以限制它子任务单的类型,以及子任务单从父级继承的字段等。你即可以直接在某个任务单页面直接创建子任务单,也可以查看到当前所有子任务单的信息(字段是可以设置的),如下图: ![](http://trac-hacks.org/attachment/wiki/ChildTicketsPlugin/MultipleChildType.png?format=raw) 还有一个SubticketsPlugin(见:[http://trac-hacks.org/wiki/SubticketsPlugin](http://trac-hacks.org/wiki/SubticketsPlugin))提供类似的功能,但是我不喜欢这个插件,因为当增加子任务单时需要修改父任务单,这太操蛋了,而且定制性也弱很多。 ### TracTicketValidatorPlugin 主页:[http://trac-hacks.org/wiki/TracTicketValidatorPlugin](http://trac-hacks.org/wiki/TracTicketValidatorPlugin)。这是金山珠海的员工 Richard Liao 贡献的插件,提供了基于正则表达式的字段合法性校验,非常赞。还有一个很类似的插件叫 TicketValidatorPlugin(见:[http://trac-hacks.org/wiki/TicketValidatorPlugin](http://trac-hacks.org/wiki/TicketValidatorPlugin)),但我不喜欢,因为它是基于 ticket 的状态来验证的字段的合法性的,而且只提供弱爆了的 required 验证。 ### XmlRpcPlugin 主页:[http://trac-hacks.org/wiki/XmlRpcPlugin](http://trac-hacks.org/wiki/XmlRpcPlugin),顾名思义,这个插件给 Trac 提供了 XML-RPC 机制,这样类似 TaskTrayTask 的客户端软件就可以通过 XML-RPC 定期查询 Trac,获得新的信息,并提供用户。除此之外,还有不少应用也依赖于它。使用时的注意事项就是需要给用户开通 XML-RPC 权限。 ### TracSqlPlugin 主页:[http://trac-hacks.org/wiki/TracSqlPlugin](http://trac-hacks.org/wiki/TracSqlPlugin)。这个插件应该很少人用,但是真的赞爆了!这个插件在你想 hack Trac 的时候非常有用。启用后,它在页面上增加了一个“SQL”的选项卡(右上角)。通过它可以:1)使用 SQL 语句查询数据库,2)查询格式化或未格式化的数据,3,导出数据为CSV,4)浏览数据库数据表结构。无论你使用提 SQLite、MySQL 还是 PostgreSQL 都可以使用这个插件。效果图: ![](http://trac-hacks.org/attachment/wiki/TracSqlPlugin/sql-query.png?format=raw) to be continued...