プラグインスクリプトファイルの作成
例えば、「test」という名前のプラグインを作成するならば、「test.inc.php」という名前のファイルをPukiWikiのプラグインフォルダに作成する。ファイルは、適当な文字コード(通常はEUC)で保存する。
インラインプラグイン(「&test();」と書いて使用するもの)では、「plugin_プラグインの名前_inline」という名前の関数を作る。testプラグインでは、「plugin_test_inline」となる。
この関数では、表示する文字列を返すようにする。例えば、「&test();」で「こんにちは」と表示されるようにするには、次のようにする。
1: <?php 2:function plugin_test_inline() 3:{ 4: return 'こんにちは'; 5:} 6:?>
ここで返す文字列はそのまま出力されるので、注意が必要(つまり、HTMLタグなども有効になる)。そのまま出力するのが危険な場合は、htmlspecialchars関数などで変換しておく。
ブロックプラグイン(「#test()」と一行に書いて使用するもの)では、「plugin_プラグインの名前_convert」という名前の関数を作る。testプラグインでは、「plugin_test_convert」となる。
この関数では、表示する文字列を返すようにする。例えば、「#test()」で「こんにちは」と表示されるようにするには、次のようにする。
1: <?php 2:function plugin_test_convert() 3:{ 4: return 'こんにちは'; 5:} 6:?>
インラインプラグインと同様、そのまま出力されるので、注意が必要。
コマンドプラグイン(「./?plugin=test」のようなURLを呼び出して使用するもの)では、「plugin_プラグインの名前_action」という名前の関数を作る。testプラグインでは、「plugin_test_action」となる。
この関数では、ページのタイトルとページの内容が格納された配列を返す。ページのタイトルは「msg」、内容は「body」というキー名で格納する。例えば、「./?plugin=test」でタイトルが「テスト」で、内容が「こんにちは」と表示されるようにするには、次のようにする。
1: <?php 2:function plugin_test_action() 3:{ 4: return array('msg'=>'テスト', 'body'=>'こんにちは'); 5:} 6:?>
インラインやブロック型プラグインを呼び出す時に指定されたパラメータを取得するには、plugin_test_inlineやplugin_test_convert関数でfunc_get_args関数を呼び出す。
1: <?php 2:function plugin_test_convert() 3:{ 4: //パラメータの数の確認 5: if (func_num_args() < 1) 6: return 'パラメータの数が不正です。'; 7: //パラメータの取得 8: $args = func_get_args(); 9: 10: //はじめのパラメータを表示 11: return htmlspecialchars($args[0]); 12:} 13:?>
コマンドプラグインの場合は、POSTデータは$post、GETデータは$get、POST+GETデータは$varsという連想配列のグローバル変数に格納される。
インラインプラグインの「{}」で囲まれた最後のパラメータは、WikiテキストからHTMLに変換されている。この最後のパラメータは、指定されていなくてもfunc_get_args関数で返される配列の最後に格納されるため、array_pop関数でこの部分を取得できる。
1: <?php 2:function plugin_test_inline() 3:{ 4: //パラメータの取得 5: $args = func_get_args(); 6: //{}で指定されたパラメータを取得 7: $lastparam = array_pop($args); 8: 9: return $lastparam; 10:} 11:?>
プラグインが呼び出された時、始めに「plugin_プラグイン名_init」という名前の関数が呼び出される。
プラグイン内からは、普通の方法ではグローバル変数を定義できないようだ(定義したとしても削除される)。その代わりに、「plugin_プラグイン名_init」関数内でset_plugin_messages関数を使う。
以下に例を示す。plugin_test_init関数内で変数名と値の組み合わせの連想配列をset_plugin_messages関数に渡し、plugin_test_inline関数内では、$_plugin_test_a変数を取得して表示している。
1: <?php 2:function plugin_test_init() 3:{ 4: $messages = array( 5: '_plugin_test_a' => 'aaaaa', 6: ); 7: set_plugin_messages($messages); 8:} 9: 10:function plugin_test_inline() 11:{ 12: global $_plugin_test_a; 13: 14: return $_plugin_test_a; 15:}