差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行は
このように表示します。
ページ間に親子の階層構造を定義することで,Wikiページ間のナビゲーションの充実を図る.
*はじめに
ページ間に親子関係を定義して,パンくずリストなどの要素を提供することで,ページ間移動が便利になる.
既存のプラグインでは,ページ名に「/」区切りで階層を記述するという方法で親子関係を定義しているが,
この方法ではページ名が非常に長くなり,ページ間のリンク時にエイリアスを多用する羽目になりかねない.
※例えばこのページの名前は,「&verb(PyukiWiki/ページ間の階層構造)」となる.
そこでRensaWikiではエイリアスの多用という面倒を避けるために,ページ名以外の方法で親子関係を定義する方法の設計,実装を行った.
----
*親子関係の定義仕様
**(1)親ページで子ページを定義する場合
***リンク
リンクに記述しているリンク先ページ名の末尾に「#as_child」と記述すると,
-親:現ページ
-子:リンク先ページ
と定義できる.
例)
[[かも#as_child]]
[[SkeltonEx>アルゴリズム(SkeltonEx)#as_child]]
[[カモ#as_child]]
[[SkeltonEx2>アルゴリズム(SkeltonEx2)#as_child]]
***ls2プラグイン
ls2プラグイン呼び出しの引数に,「as_child」オプションを追加すると,
-親:現ページ
-子:リンク先ページ群(パターンに一致するページ群)
と定義できる.
例)
#ls2(Plugin/,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プラグインも含めて,既存プラグインへの影響はない.