PukiWikiのプラグイン


宅内のPukiWikiベースのプライベートのシステムを更新しています。PukiWikiベースというのは、各システムを外部リンクで参照しているだけ、今回この各システムをプラグイン化するのが目的でした。そこでハマってしまいました。

プラグインその物の構造は簡単です。testのブロック型プラグインとすると、./plugin配下にtest.inc.phpのファイル名で記述していきます。まず、プラグインが呼ばれた時に呼び出される関数を、plugin_test_convert()で定義し、必要ならFORMのactionで呼び出された関数をplugin_test_action()で定義します。そして、それぞれの関数で出力するhtmlを返すだけです。

で、ハマったと言うのはplugin_test_action()でした。通常PukiWikiの画面構成は、top.menu,bodyの3画面となっています。plugin_test_convert()の出力結果は、3画面で表示してくれるのですが、plugin_test_action()では、menuの表示されない2画面構成での表示となってしまったのです。


<?php
function plugin_test_action()
{
	global $vars;

	return array('body' => $vars['input']);
}

function plugin_test_convert()
{
	$script = get_script_uri();
	return <<<EOD
<form action="$script" method="get">
<input type="hidden" name="cmd" value="test" />
<input type="input" name="input" value="" />
<input type="submit" value="submit" />
</form>
EOD;
}
?>
ページを表示する処理は、skin/pukiwiki.skin.php内の以下の処理で行っています。
if (arg_check('read') && exist_plugin_convert('menu'))の条件に成立する場合に、menuページおよび$bodyが表示され、そうでない$bodyだけが表示されています。exist_plugin_convert('menu')はtrueです。arg_check('read')がfalseを返していることになります。
<?php if (arg_check('read') && exist_plugin_convert('menu')) { ?>
<table border="0" style="width:100%">
 <tr>
  <td class="menubar">
   <div id="menubar"><?php echo do_plugin_convert('menu') ?></div>
  </td>
  <td valign="top">
   <div id="body"><?php echo $body ?></div>
  </td>
 </tr>
</table>
<?php } else { ?>
<div id="body"><?php echo $body ?></div>
<?php } ?>
arg_check()はlib/func.phpに定義されていて,$var['cmd']が引数のデータが設定されているかチェックしているだけです。この場合readになるわけです。
function arg_check($str)
{
	global $vars;
	return isset($vars['cmd']) && (strpos($vars['cmd'], $str) === 0);
}
結論として、plugin_test_action()で、$vars['cmd'] = "read"で設定してやればいいだけの事でした。
function plugin_test_action()
{
	global $vars;

	$vars['cmd'] = "read";
	return array('body' => $vars['input']);
}



最終更新 2011/12/07 19:19:13 - north
(2011/12/06 14:28:35 作成)
添付ファイル
wiki2.png - north
wiki1.png - north


検索

アクセス数
3575125
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。