プラグインの詳細設定画面を追加する

プラグインの詳細設定画面を追加してみます。

今回はプラグインの書き方で作成したplugin_baseプラグインに書き足す形で機能の追加を行います。


/CMSインストールディレクトリ/common/site_include/plugin/plugin_base/plugin_base.php

<?php

class PluginBasePlugin{

	const PLUGIN_ID = "plugin_base";

	function getId(){
		return self::PLUGIN_ID;
	}

	function init(){
		CMSPlugin::addPluginMenu(self::PLUGIN_ID,array(
			"name" => "プラグインの基本構造",
			"type" => Plugin::TYPE_NONE,
			"description" => "",
			"author" => "",
			"url" => "",
			"mail" => "",
			"version" => "1.0"
		));
		
		// 当プラグインが有効であるかを調べる
		if(CMSPlugin::activeCheck(self::PLUGIN_ID)){
			if(defined("_SITE_ROOT_")){
				// 公開側ページの方で動作する拡張ポイントで使用したいものを追加する
			
			}else{
				// 管理画面側の方で動作する拡張ポイントで使用したいものを追加する

				CMSPlugin::addPluginConfigPage(self::PLUGIN_ID, array(
					$this, "config_page"
				));
			}
		}
	}

	function config_page(){
		return "プラグインの設定画面等を表示する";
	}

	public static function register(){
		$obj = CMSPlugin::loadPluginConfig(self::PLUGIN_ID);
		if(!$obj) $obj = new PluginBasePlugin();
		CMSPlugin::addPlugin(self::PLUGIN_ID, array($obj, "init"));
	}
}

PluginBasePlugin::register();

initメソッドの管理画面の方の処理にCMSPlugin::addPluginConfigPageで詳細画面用のメソッド(今回はconfig_pageにした)を登録して、config_page内で文字列を返すと、

https://github.com/inunosinsi/soycms/blob/master/cms/common/util/CMSPlugin.class.php


soycms_plugin_config_page


プラグインの詳細画面にconfig_pageの返り値の文字列がそのまま出力されます。




ただ、この方法ではHTMLとPHPが混在して設定画面の構築とメンテナンスが大変になりますので、SOY CMSの最大の良さであるHTMLとPHPを切り分けて管理する方法を導入しみます。

この先からはプラグインIDがplugin_configで話を進めます。


最初にプラグインIDがplugin_configのファイルの構造を下記のようにします。

/CMSインストールディレクトリ/common/site_include/plugin/pluglin_config/ 以下のファイル構造を下記のようにします。

plugin_config
├── config
│	├── PluginConfigSamplePage.class.php
│	└── PluginConfigSamplePage.html
└── plugin_config.php

configディレクトリ以下のファイルはPHPファイルの方が***.class.phpのようにして、HTMLファイルは***.htmlにします。

***の箇所は自由ですが、.class.phpファイルと.htmlファイルのファイル名は同一にしておくと後々便利です。


先にconfigディレクトリ以下のファイルを見ていきます。

/CMSインストールディレクトリ/common/site_include/plugin/pluglin_config/config/PluginConfigSamplePage.class.php

<?php

// クラス名はファイル名と同じにする
class PluginConfigSamplePage extends WebPage {

	private $pluginObj;

	function __construct(){

	}

	// POST送信した時に実行する
	function doPost(){

	}

	// createAdd等の記述を行う
	function execute(){
		// 下記のコードは対になるHTMLファイルを出力する為に必須
		parent::__construct();
	}

	/**
	 * 当PHPファイルと対になるHTMLファイルを指定する
	 * この関数を省略すると、同階層の同名のHTMLファイルを読み込みます
	 */
	function getTemplateFilePath(){
		return dirname(__FILE__) . "/PluginConfigSamplePage.html";
	}

	function setPluginObj($pluginObj){
		$this->pluginObj = $pluginObj;
	}
}

/CMSインストールディレクトリ/common/site_include/plugin/pluglin_config/config/PluginConfigSamplePage.html

プラグインの設定画面等を表示する

これで詳細設定画面の準備が出来ました。

後はこのファイルをプラグインの本体のファイルで読み込みます。

冒頭のコードで作成したconfig_pageメソッドを下記のように書き換えます。

function config_page(){
	SOY2::import("site_include.plugin.plugin_config.config.PluginConfigSamplePage");
	$form = SOY2HTMLFactory::createInstance("PluginConfigSamplePage");
	$form->setPluginObj($this);
	$form->execute();
	return $form->getObject();
}

これで、PluginConfigSamplePage.htmlの記述内容が表示できるようになりました。


今回のコードの詳細は下記のURLから確認出来ます。

https://github.com/inunosinsi/soycms/tree/master/cms/common/site_include/plugin/plugin_config


コードの詳細ですが、

SOY2::import("site_include.plugin.plugin_config.config.PluginConfigSamplePage")

はPHPのinclude_onceをする時にファイルの有無であったり、既に読み込まれたクラスでないか?といったチェックを行った後にクラスファイルを読み込みます。

https://github.com/inunosinsi/SOY2/blob/master/SOY2/SOY2.php


パスの指定の仕方はスラッシュではなく、ドット区切りになります。

SOY2で既にSOY2::RootDir()として、/CMSインストールディレクトリ/common/まで登録していますので、SOY::import()を行う時はcommonディレクトリより後のパスをドット区切りで指定します。

ファイル名の末尾が.class.phpであれば、.class.phpを省略してパスを指定します。


HTMLファイルとPHPファイルの切り分けはSOY2HTMLという仕組みを用いています。

SOY2HTMLに関しては長くなりますので、今回は省略します。

https://github.com/inunosinsi/SOY2/tree/master/SOY2HTML

同じカテゴリーの記事