プラグイン開発

サポートするプラグイン

FSWikiLiteはFSWikiとは違い、Wikiページに記述して使用するタイプのプラグイン(インラインプラグインとパラグラフプラグイン、ブロックプラグイン)しかサポートしていません。ただし、FSWikiでアクションプラグインと呼ばれているものについては別のCGIスクリプトを用意することで対応することができます(Liteのcategory.cgiなどがこれにあたります)。

プラグインは〜.plという名前を付けてpluginディレクトリに配置します。そしてlib/setup.plでrequireします。デフォルトのsetup.plではcore.plのみ読み込むよう設定されています。

require "./plugin/core.pl";

インラインプラグイン

インラインプラグインはWiki::Pluginパッケージで定義されたPerl関数のリファレンスです。関数の引数にはWikiソースで記述した引数がそのまま渡されます。関数は戻り値としてHTMLを返すように実装します。また、スクリプトのBEGIN節で関数のリファレンスをインラインプラグインとして登録します。

package Wiki::Plugin;
BEGIN {
  $main::I_PLUGIN->{hello} = \&hello;
}
sub hello {
  my $name = shift;
  if($name eq ''){
    return "名前を入力してください。";
  } else {
    return "こんにちは".&Util::escapeHTML($name)."さん";
  }
}
1;

ページ編集時に以下の書式で使用することができます。

{{hello たろう}}

パラグラフプラグイン

パラグラフプラグインも実装方法はインラインプラグインと同様です。ブロック要素を含むHTMLを返却する場合にはパラグラフプラグインとして実装します。BEGIN節での登録方法のみが異なります。

BEGIN {
  $main::P_PLUGIN->{hello} = \&hello;
}

ブロックプラグイン

ブロックプラグインも実装方法はインラインプラグインと同様です。複数行に渡るパラメータを使用する場合にはブロックプラグインとして実装します。

BEGIN {
  $main::B_PLUGIN->{hello} = \&hello;
}
sub hello {
  my $text = shift;
  my $name = shift;
  if($name eq ''){
    return "名前を入力してください。";
  } else {
    return "こんにちは".&Util::escapeHTML($name)."さん<br>\n".$text;
  }
}
---- Wikiコード ----
{{hello たろう
ご機嫌いかがですか?
今日は良い天気ですね。
}}

リクエストパラメータへのアクセス

プラグイン内部からリクエストパラメータにアクセスするには%main::inという変数を利用します。これはcgi-lib.plでパースされたリクエストパラメータが格納された連想配列です。

# ページ名を取得
my $p = $main::in{'p'};

プラグインから利用可能なユーティリティ

プラグイン内部ではUtilパッケージに定義されたユーティリティ関数を使用することができます。Utilパッケージには以下のような関数が定義されています。

関数名 説明
url_encode URLエンコードします。
url_decode URLエンコードされた文字列をデコードします。
escapeHTML HTMLをエスケープします。
format_date 日付をフォーマットします。
trim 文字列の前後の空白を取り除きます。
delete_tag タグを削除して文字列のみを取得します。
check_pagename 文字列が使用可能なページ名かどうかチェックします。
check_numeric 文字列が数値かどうかチェックします。
send_mail メールを送信します。
error エラー画面を表示します。
handyphone 携帯電話かどうかを判断します。
smartphone スマートフォンかどうかチェックします。

アクションスクリプト

FSWikiでアクションプラグインとして実装されているプラグインは別途CGIスクリプトを作成することで対応することが出来ます。actionパラメータの代わりにそのCGIスクリプトを呼び出すようにします。CGIスクリプトからはcommon.plに定義された関数群を使用してページの取得や保存などを行うことが出来ます。

FSWikiLiteではデフォルトでedit.cgi(ページの編集)、download.cgi(添付ファイルのダウンロード)、category.cgi(カテゴリ表示)という3つのアクションスクリプトが用意されていますので、これらを参考にしてください。