PluginForPlugin

Top > Hack > PluginForPlugin
Table of Contents

プラグイン用プラグインの仕組みを考える

たとえば edit プラグイン

:config なページに edit プラグイン用プラグイン名を登録しておく。#edit プラグイン用プラグインは plugin/edit/PLUGIN.inc.php という名前で作って登録とする、という方式もあるかもしれないが、プラグインファイルが分かれてしまってやりにくいと思うのでボツ。

edit プラグインでその config を読み、 指定されたプラグインの function plugin_PLUGIN_edit_before や function plugin_PLUGIN_edit_after などを呼ぶ(編集前、編集後)

関数に渡される引数はそれぞれのメインプラグイン(edit)で勝手に指定。

プラグイン用プラグインは渡された情報の中で頑張る。

rename プラグインなら function plugin_PLUGIN_rename($before = array(), $after = array()) となるのでしょうか。

edit プラグインで、もっと plugin_PLUGIN_edit_form などもサポートして、フォームを追加できたり、 それに対する処理を plugin_PLUGIN_edit_action でできたりするともっと楽しそう。概要フィールドとか、タグフィールドとか。

ボツ

編集時に起動されるプラグインの仕組みをどう実現するか考える

1.編集時起動用フォーム

もう1つ編集フォームを用意し、そこの内容を保存時(正確には保存後?)convert_html する。

既存のインライン型、ブロック型のプラグインをそのまま使える。

一応、本文におかれた場合か、保存時起動フォームにおかれた場合か区別できるように、直前にグローバル変数か定数を定義する。

移行が楽

将来的のために、function plugin_xxx_write があれば起動できるようにしておく。

2.保存時起動文法を作る

@ でも ! でも % でもなんでもよいが、convert_html 時には無視(むしろ削除)され、 保存後に実行される関数 (exec_write_plugins?) で本文から抽出され、実行される文法を作る。

各プラグインファイルで function plugin_xxx_write を定義し、その関数が実行される。

保存前に実行される仕組みも必要なら、function plugin_xxx_beforewrite, function plugin_xxx_afterwrite の2関数?(長いな)

欠点:本文に、起動されるが何も HTML 出力されないプラグインを書くのは気が引ける。

やはり別フォームが必要か。案1に帰着するか。


個人的欠点:別フォームのことを考えると、概要フィールドや更新日時フィールドが欲しいなど欲が出てきて困る。

編集画面をプラグインから改造する仕組みも欲しいか?(せいぜい項目追加かと思うが)