ページ間に親子の階層構造を定義することで,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プラグインも含めて,既存プラグインへの影響はない.


© 2024 KMIソフトウェア