ページ間に親子の階層構造を定義することで,Wikiページ間のナビゲーションの充実を図る.
はじめに
ページ間に親子関係を定義して,パンくずリストなどの要素を提供することで,ページ間移動が便利になる.
既存のプラグインでは,ページ名に「/」区切りで階層を記述するという方法で親子関係を定義しているが,
この方法ではページ名が非常に長くなり,ページ間のリンク時にエイリアスを多用する羽目になりかねない.
※例えばこのページの名前は,「PyukiWiki/ページ間の階層構造」となる.
そこでRensaWikiではエイリアスの多用という面倒を避けるために,ページ名以外の方法で親子関係を定義する方法の設計,実装を行った.
親子関係の定義仕様
(1)親ページで子ページを定義する場合
リンク
リンクに記述しているリンク先ページ名の末尾に「#as_child」と記述すると,
と定義できる.
例)
[[カモ#as_child]]
[[SkeltonEx2>アルゴリズム(SkeltonEx2)#as_child]]
ls2プラグイン
ls2プラグイン呼び出しの引数に,「as_child」オプションを追加すると,
- 親:現ページ
- 子:リンク先ページ群(パターンに一致するページ群)
と定義できる.
例)
#ls2(PluginEx/,as_child)
(2)子ページで親ページを定義する場合
//parent=親ページ名
上記のWikiコメントをページ内に記述すると,
と定義できる.
例)
//parent=PyukiWiki
ページ内のどこに記述しても良いが,先頭行に書くとRecentChangesやページのtitleに使われてしまうため,2行目に記述することを推奨する.
実装
wiki.cgiの変更
既存プログラムの変更は極力避けたかったが,wiki.cgiに1箇所変更が入ってしまった.
wiki.cgi(ver 0.1.5)の、sub make_link()を一部改造.関数内の先頭にある
my $chunk = shift;
の直後に,
$chunk =~ s/\[\[(.*)#.*\]\]/\[\[\1\]\]/g;
を挿入した.これは,リンクで子ページを定義するために#as_childと記述された場合に,表示からその部分を除去するために必要.
プラグイン
それ以外はプラグインの新規作成で対応した.ls2プラグインも含めて,既存プラグインへの影響はない.