plugin_xxx_write

Top > Hack > plugin_xxx_write

ページ保存時実行プラグインの仕組み

Table of Contents

ページ保存時にプラグインを実行する仕組みを実現します。

ダウンロード

svn:hack/plugin_xxx_write.diff

仕様

plugin ディレクトリに plugins_write_before.txt, plugin_write_after.txt を作成します。

ページ保存直前に実行したいプラグインを plugins_write_before.txt に、 ページ保存直後に実行したいプラグインを plugins_write_after.txt に記述します。例

dump2html
tag
spamfilter

各プラグインファイル内の

void plugin_xxx_write_before(&$page, &$postdata, &$notimestamp);
void plugin_xxx_write_after(&$page, &$postdata, &$notimestamp);

がそれぞれ実行されます。

過去ログ

tag.inc.php, やスパムチェックなプラグインなどページ保存時に実行したい機能をサポート

原案

  • page_write 関数にプラグイン呼び出し関数を書く
  • 呼び出されるプラグインは :config なページに登録されているプラグイン
  • function exist_plugin_write を用意する。
  • 保存前、保存後が欲しいかもしれないので plugin_xxx_write_before, plugin_xxx_write_after の2関数

プラグインは ftp アップロードされることを考えると、:config なページにリストするよりも、plugin フォルダに txt をおいたほうが良いかもしれん・・・。→ plugin フォルダに txt

関数の返り値は何であるべきか。メッセージを返されてもどう表示するとよいものか。→ void →やはりエラーメッセージを返してもらい結合、die_message で表示することにする。エラーメッセージ以外に返したいものはあるだろうか。→ページ書き込み後、リダイレクトしたいプラグインは url を返すかもしれない。→それが複数ある場合はどう対応したらよいものか。

関数の引数は何であるべきか。page_write の引数と内部で生成される変数、$page, $postdata, $notimestamp, $oldpostdata, $diffdata でよいか。→ page_write の引数である $page, $postdata, $notimestamp だけで充分でしょう。→いや、write_after で $oldpostdata にアクセスしたいときがあるかもしれないので、$oldpostdata も渡すべきかもしれない。$diffdata はいらないだろう。

プラグインの引数をリストファイルに記述できるとよいかもしれない。例:

dump2html(overwrite,urlstyle=relative)

各ページに対して別個の引数をもてる仕組みが欲しい。それがないと tag.inc.php が使えない。$postdata から抜き出すのは処理が重過ぎる・・・。

ページ新規作成、ページ削除、のフラグを持ちたい.

可変引数

ひょっとしたら、渡す値の数を増やしたくなったりもするかもしれないので、func_get_args() でとる形にしたほうがとりあえず良いかもしれない。 page_write

call_user_func_array('plugin_xxx_write_after', array($page, &$postdata, $notimestamp, &$oldpostdata));
function plugin_xxx_write_after()
{
    $args = func_get_args();
    $page = $args[0]; $postdata = $args[1]; $notimetamp = $args[2]; $oldpostdata = $args[3];
}

可変引数参照渡しにもなるはず

ToDo

page_write 中で unset($oldpostdata) があるのでコメントアウトしないと