Trac 0.11.x で Wiki ページにメニューを付ける

0.11に移行後、サイドメニューが表示されない。 - 日記trac にサイドメニューを付けてみる - 記憶は削除の方向でを読んで、「そういえば PukiWiki のメニューバーみたいなの*1をやってみよう」としてたのを思い出しました。
ということで Trac 0.11.x/Genshi でやってみました。

1. wiki_view.html を用意する

/usr/lib/python2.3/site-packages/trac/wiki/templates/wiki_view.html みたいなところにありますので、このファイルを ${TRAC_ENV}/templates/wiki_view.html にコピーします。
コピーしたら ↓ の差分を追加します。

--- wiki_view.html.orig	2008-08-07 02:29:02.000000000 +0900
+++ wiki_view.html	2008-09-05 20:33:21.000000000 +0900
@@ -34,6 +34,13 @@

       <div class="wikipage searchable" py:choose="" xml:space="preserve">
         <py:when test="page.exists" xml:space="preserve">
+          <py:if test="page.name != 'Menu'">
+            <py:with vars="page_menu = page.__class__(page.env, 'Menu')">
+              <py:if test="page_menu.exists">
+                <div class="wiki-toc">
+                  ${wiki_to_html(context, page_menu.text)}
+                </div>
+              </py:if>
+            </py:with>
+          </py:if>
           ${wiki_to_html(context, page.text)}
         </py:when>
         <py:otherwise>

wiki_view.html が用意出来たら、ファイルを配置したことを認知させるために tracd (または apache2) を再起動します。

2. wiki:Menu ページを記述する

表示させたい内容を wiki:Menu ページに記述します。

3. wiki:Menu 以外のページを見る

こんな感じになります。

wiki:Menu の内容を取り出すあたりが強引ですが、とりあえず出来ました。
表示する位置などは class="wiki-toc" を別のものにするなどして調整してください。

*1:特定の Wiki ページの内容がすべてのページのメニューとして表示される機能