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

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

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

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

![Wikiページに表示されるパンくずリスト](/blog/wp-content/uploads/2009/07/20090703-breadcrumb.png)

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

![Wikiページがない](/blog/wp-content/uploads/2009/07/20090703-page-not-found.png)

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

まず 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 @@

+

+ ${wiki_to_html(context, “—-\n== Recent Changes ==\n[[RecentChanges(%s/,5)]]\n—-\n== Title Index ==\n[[TitleIndex(%s/,format=group)]]” % (page.name, page.name))}
+


ここでは `page` 変数が要求されている Wiki ページであり、`wiki_to_html` 変数が [TracWiki](http://trac.edgewall.org/wiki/TracWiki) 文字列を HTML に変換するメソッドになっています。

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

![TitleIndexを表示するようにした](/blog/wp-content/uploads/2009/07/20090703-titleindex.png)

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

Categorized: Trac