前回の続きだが、せっかくWikiにするならナビゲーション要素を充実させようと考えていて,パンくずリストと関連ページリストは,装備しようと思っている.

今回はパンくずリストを検討した.

PyukiWikiでのパンくずリストの実現は,表現したい階層を,ページ名にスラッシュ区切りの表記で含ませるという方法を使っていた.(仮に「ページ名ベースのパンくずリスト」と呼ぶ) しかしこの方法は,ページ名がやたら長くなってページ間リンクでエイリアスを多用する羽目になりそうなので,俺は使いたくない.エイリアスは面倒だ.

それではどうすれば良いかとあれこれ思案した結果,ページ間リンクで親子関係を表現することにした.(「リンクベースのパンくずリスト」と呼んでみる) これは, などでリンクする時に「リンク先が子ページ」ということを表現できるようにしておいて,その情報を元にパンくずリストを生成するという方法だ. そうすれば,ページ名はページ間の関係とは無関係になるので,むやみに長くなることもない.

[実装例]
COM大会/第1回において,タイトルのすぐ下の

FrontPage > 連鎖ゲームCOM大会 > COM大会/第1回
という表記がパンくずリスト.

親ページ(連鎖ゲームCOM大会)における子ページへのリンク表記は,

[[COM大会/第1回#as_child]]

という記述にしており,今回行った以下の実装により,パンくずリストが得られている.

  • プラグイン(linktopicpath.inc.pl)では,これを親子関係として解釈する
  • wiki.cgiでは,ページ表示時に#以降の部分を無視する

これはこれで使えるわけだが、しかし欠点がある。ページを追加するたびに親ページのメンテナンスが発生してしまう.これは面倒だ.

そこで,子ページにおいて親ページを指定するような記述も,行えるようにした. 具体的には,以下のようなWikiコメントを記述すれば,それをプラグイン(linktopicpath.inc.pl)が解釈してパンくずリストに反映するように修正した.

 //parent=連鎖アルゴリズムの設計

これにより,親ページのメンテナンスは不要になった.

子ページで親ページを指定するという方法は,よく考えるとこのMovableTypeのようなweblogシステムで,ページ作成時にカテゴリを指定するという方式と似ている.(カテゴリは親ページを特殊化したものと位置づけることができる) せっかくなのでこのカテゴリの概念を実現するために,ある親ページが持っている子ページのリストを表示するというプラグインも作成した.

その結果例は,連鎖アルゴリズムの設計など.weblogにおけるカテゴリ一覧のページに相当する. ちなみにこのページのWikiソースは,以下の2行だけである.ls_child()が今回作成したプラグインだ.

連鎖アルゴリズムの設計についての資料.
#ls_child(,subject)

こういうところは,CMSの真骨頂と言えよう.自己満足度高し ( ̄ー ̄)


© 2024 KMIソフトウェア