プラグインブロック用のプラグインを作成してみます。
今回のコードはプラグインIDがplugin_blockのプラグインで話を進めます。
/CMSインストールディレクトリ/common/site_include/plugin/plugin_block/plugin_block.php
<?php
class PluginBlockPlugin{
const PLUGIN_ID = "plugin_block";
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::setEvent("onPluginBlockAdminReturnPluginId", self::PLUGIN_ID, array($this, "returnPluginId"));
}
}
}
function returnPluginId(){
return self::PLUGIN_ID;
}
public static function register(){
$obj = CMSPlugin::loadPluginConfig(self::PLUGIN_ID);
if(!$obj) $obj = new PluginBlockPlugin();
CMSPlugin::addPlugin(self::PLUGIN_ID, array($obj, "init"));
}
}
PluginBlockPlugin::register();
initメソッドの管理画面側の方にonPluginBlockAdminReturnPluginIdのイベントを登録しておきます。
このイベントで文字列を返すと、


プラグインブロックの設定のブロックの設定の項目に追加されます。
続いて、公開側でブロックの出力に関するコードを追加します。
<?php
class PluginBlockPlugin{
const PLUGIN_ID = "plugin_block";
function getId(){
return self::PLUGIN_ID;
}
function init(){
/** プラグインの情報の登録の箇所は省略 **/
if(CMSPlugin::activeCheck(self::PLUGIN_ID)){
if(defined("_SITE_ROOT_")){
// 公開側ページの方で動作する拡張ポイントで使用したいものを追加する
// プラグインブロックの挙動用のイベントを追加
CMSPlugin::setEvent("onPluginBlockLoad", self::PLUGIN_ID, array($this, "onPluginBlockLoad"));
}else{
// 管理画面側の方で動作する拡張ポイントで使用したいものを追加する
// プラグインブロックの設定画面で当プラグインを項目に追加
CMSPlugin::setEvent("onPluginBlockAdminReturnPluginId", self::PLUGIN_ID, array($this, "returnPluginId"));
}
}
}
function onPluginBlockLoad(){
// プラグインブロック内で出力したい記事一覧を取得する
$pdh = new PDO(_SITE_DSN_, _SITE_DB_USER_, _SITE_DB_PASSWORD_);
// 新着記事5件を降順で取得
$sql = "SELECT * FROM Entry WHERE isPublished = 1 ORDER BY cdate DESC LIMIT 5";
$stmt = $pdh->prepare($sql);
$stmt->execute();
$entries = $stmt->fetchAll();
return $entries;
}
/** onPluginBlockAdminReturnPluginIdとプラグインの登録のメソッドは省略 **/
}
onPluginBlockLoadのイベントでは、記事に関する値(Entryオブジェクトか、連想配列でid、titleとaliasのキーがあるもの)が格納された配列を返します。
今回のコードは下記のURLにサンプルコードがあります。
https://github.com/inunosinsi/soycms/tree/master/cms/common/site_include/plugin/plugin_block
プラグインブロックの拡張ポイント関連で実際のプラグインでコードを確認したい場合はSOY CMS検索結果ブロックプラグイン(プラグインID : soycms_search_block)がおすすめです。
https://github.com/inunosinsi/soycms/tree/master/cms/common/site_include/plugin/soycms_search_block
