[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 的風格即時提示用戶名,這樣只記住用戶名的前面一兩個字母就行啦。效果圖:

還有一個可選的類似插件叫 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,可以實現屬主的列表選擇,但是對于中國人來說,要記住別人的用戶名實在是太困難了,因為有些人是用英文名、有些人用拼音名、有些人姓在前面,有些人姓在后面,最后的方式莫過于能夠通過真實姓名來選擇。這個插件就是解決了這個問題,效果圖:

我對 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),通過一些設置,這個插件能夠實現日期的可視化輸入和校驗,效果圖:

### 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
}
}}}
~~~
效果圖:

需要注意的是使用這個插件需要在機器上安裝 graphviz 程序。
### ChildTicketsPlugin
主頁:[http://trac-hacks.org/wiki/ChildTicketsPlugin](http://trac-hacks.org/wiki/ChildTicketsPlugin)。這個插件功能強大,不過簡單來說就是給 Trac 帶入子任務單的概念。可以設置某個類型的任務單是否能夠擁有子任務單,也可以限制它子任務單的類型,以及子任務單從父級繼承的字段等。你即可以直接在某個任務單頁面直接創建子任務單,也可以查看到當前所有子任務單的信息(字段是可以設置的),如下圖:

還有一個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 都可以使用這個插件。效果圖:

to be continued...