プラグイン開発についてその3
プラグイン開発その3 管理画面での設定
プラグインによっては設定項目を持つ必要が出てきます。
ここでは、設定項目の表示と値の保存、値の読み出しについて解説します。
自前でSQLiteやファイルベースのデータベースを持つことは可能ですが、SOYCMSではプラグイン毎に簡単に
データを保存する機能が搭載されています。
プラグイン開発その3 管理画面での設定
プラグインによっては設定項目を持つ必要が出てきます。
ここでは、設定項目の表示と値の保存、値の読み出しについて解説します。
自前でSQLiteやファイルベースのデータベースを持つことは可能ですが、SOYCMSではプラグイン毎に簡単に
データを保存する機能が搭載されています。
その1、その2で解説した「Hello,World!」プラグインをベースに開発を進めます。
まずは入力フォームを表示出来るようにhello_world_config()メソッドを変更します。
function hello_world_config(){ $hello_world_string = "Hello,World!"; return hello_world_form($hello_world_string); }
function hello_world_form($value){ $html = array(); $html[] = '<form method="post">'; $html[] = '文字:<input type="text" name="hello_world_string" value="'. htmlspecialchars($value,ENT_QUOTES).'">'; $html[] = '<input type="submit" value="保存">'; $html[] = '</form>'; return implode(" ",$html); }
フォームの表示部分は別のメソッドに定義しなおしました。
formのactionを空にすることで、自分自身に飛ばすことが出来ます。
これでフォームは表示することが出来ましたが「保存」ボタンを押しても何も起こりません。
続いて、保存がおされた時の処理を追加します。
function hello_world_config(){ $hello_world_string = "Hello,World!"; if(isset($_POST["hello_world_string"])){ $hello_world_string = $_POST["hello_world_string"]; } return hello_world_form($hello_world_string); }
isset($_POST["hello_world_string"])
の条件で保存ボタンの押下を判定していますが、
ほかにも方法はあります。
例)submitボタンにnameをつけて判定。hidden値で判定...etc
これで、見掛け上フォームの文字を書き換えることが出来るようになりましたが、保存されていないため
リロードすると値は書き変わっていません。
これを保存するようには以下のように追加します。
function hello_world_config(){ $hello_world_string = CMSPlugin::loadPluginConfig(HELLO_WORLD_PLUGIN_ID); if(!$hello_world_string){ $hello_world_string = "Hello,World!"; } if(isset($_POST["hello_world_string"])){ $hello_world_string = $_POST["hello_world_string"]; CMSPlugin::savePluginConfig(HELLO_WORLD_PLUGIN_ID,$hello_world_string); CMSPlugin::redirectConfigPage(); } return hello_world_form(); }
CMSPlugin::savePluginConfig()メソッドがプラグインの設定を保存するメソッドです。
第一引数にプラグインID、第二引数に保存する値を入力します。
CMSPlugin::loadPluginConfig()メソッドで保存した値を読み取ります。
引数はプラグインIDです。
CMSPlugin::redirectConfigPage()メソッドを呼ぶと設定画面にリダイレクトするため、二重POSTの防止になります。
値が正しく書き変わっていれば成功です。
CMSPlugin::savePluginConfig()で保存するのは文字列だけでなく、配列やオブジェクトを保存することも出来ます。
複数の値を設定する必要がある場合はそちらを使います。
SOYCMSに同梱されているプラグインの多くはプラグインを管理するオブジェクトそのものを保存しています。
パン屑プラグインを例にすると、以下のようになります。
define('BREAD_PLUGIN_NAME',"bread"); $obj = CMSPlugin::loadPluginConfig(BREAD_PLUGIN_NAME); if(is_null($obj)){ $obj = new BreadPlugin(); } CMSPlugin::addPlugin(BREAD_PLUGIN_NAME,array($obj,"init")); CMSPlugin::savePluginConfig(BREAD_PLUGIN_NAME,$this);
CMSPlugin::savePluginConfig()を用いて$this(自分自身)を保存させ、CMSPlugin::loadPluginConfig()を用いて
保存させた自分自身を復活させています。
Class化するメリットは大きいため、慣れている方はオブジェクト指向でプラグインを開発されることをお勧めします。
最後に、今回のソースをClassベースに書き直したファイルを設置しておきますので、参考にしてください。
[リンク]