TracWiki でページがないときに RecentChanges, TitleIndex を表示しておく

omae です。Trac 0.11.5 がリリース間近(いまのところ2009/07/07予定)ですね。さっそく 0.11.5rc1 をダウンロードして 社内の Trac 環境に投入してみました。いまのところ特に問題らしいところもなく動いているようです。

ところで TracWiki では Wiki ページの名前に / を用いることで階層構造を表現できるようになっています。そういったページを参照するとページ名に合わせてパンくずリストも表示されます(この機能は 0.11 から)。

SandBox/2009/07/03 というページを作った場合、以下のようなパンくずリストが表示されます。

Wikiページに表示されるパンくずリスト

これはこれでよいのですが、実際には Log/2009Log/2009/07 に対応する Wiki ページはほとんど作りません(少なくとも社内では)。そのため、Log/2009 を参照すると以下のようなそのページを作成するかどうかを聞いてくるようなページになります。

Wikiページがない

この内容にそのページ名の下位ページに対する RecentChangesTitleIndex を表示しておけば、こういうページをその都度作成しておかなくてもよいのではないかと考えました。

まず Wiki ページがないときに使用される template ファイルは trac/wiki/templates/wiki_view.html になります。このファイルを $TRACENV/templates/wiki_view.html にコピーします。このファイルは Trac インストールディレクトリにありますので、そこから持ってきます。

次にコピーした wiki_view.html を編集してページがないときの処理を追加します。変更後、必要なら Web サーバーを再起動してください。

--- wiki_view.html.orig 2009-01-29 04:55:06.000000000 +0900
+++ wiki_view.html    2009-06-24 00:02:57.000000000 +0900
@@ -98,6 +98,7 @@
         </py:if>
       </py:with>

+      <div py:if="not page.exists" xml:space="preserve">
+        ${wiki_to_html(context, "----\n== Recent Changes ==\n[[RecentChanges(%s/,5)]]\n----\n== Title Index ==\n[[TitleIndex(%s/,format=group)]]" % (page.name, page.name))}
+      </div>
     </div>
   </body>
 </html>

ここでは page 変数が要求されている Wiki ページであり、wiki_to_html 変数が TracWiki 文字列を HTML に変換するメソッドになっています。

これでページがない場合に RecentChanges, TitleIndex が表示されるようになります。さきほどの Log/2009 を参照すると以下のようになります。

TitleIndexを表示するようにした

Trac の template を変更して「うちではこんなことしてますよ」とかあれば、教えてください。

Categorized: Trac

Comments are closed.