baserCMS(CakePHP)には、プラグイン側から、処理途中に別の処理を割り込ませるイベント処理を手軽に作って利用することができます。
そのイベント処理ですが、たまーにプラグインを作るまでもなく実行したい場面があります。
そんなときの方法をシェア。
環境
- baserCMS 3.0.6.1
- PHP 5.4.19
イベント処理の作成
イベント処理自体がないのに、先にイベントを呼び出そうとするともちろんエラーになります。
そのため、先ずは先に利用したい処理を作成しておきます。
とりあえず startup() とか作って、適当な文字列をエコーさせておくとかのテスト書いて、処理が通ることから確認すると良いです。
ここでは以下にサンプル例載せておきます。
ブログコンテンツIDが1のカテゴリアーカイブを表示し、そのカテゴリ名が info の場合は、1ページの表示件数を強制的に1,000件にしてみました。
というサンプルです。
/app/Event/HogeControllerEventListener.php
<?php
/**
* [ControllerEventListener]
*
*/
class HogeControllerEventListener extends BcControllerEventListener {
/**
* 登録イベント
*
* @var array
*/
public $events = array(
'Blog.Blog.startup',
);
/**
* blogBlogStartup
* ブログのカテゴリアーカイブ表示の際、指定カテゴリではページ分割を無効化する
*
* @param CakeEvent $event
*/
public function blogBlogStartup(CakeEvent $event) {
// 管理側では無効
if (BcUtil::isAdminSystem()) {
return;
}
$Controller = $event->subject();
// 対象とするブログコンテンツID以外では無効
if (!in_array(Hash::get($Controller->blogContent, 'BlogContent.id'), array('1'))) {
return;
}
// archives アクション以外では無効
if (!in_array(Hash::get($Controller->request->params, 'action'), array('archives'))) {
return;
}
// カテゴリに属する記事一覧表示画面以外では無効
if (!in_array(Hash::get($Controller->request->params, 'pass.0'), array('category'))) {
return;
}
// ブログカテゴリが info の場合に表示件数を切替える
if (Hash::get($Controller->request->params, 'pass.1') == 'info') {
$Controller->blogContent['BlogContent']['list_count'] = 1000;
}
}
}
イベント処理の追加
イベントが発動できるように、処理したいイベントリスナーをアタッチ(取り付け)します。
記述箇所は「/app/Config/bootstrap.php」が良さそうです。
「Attach Events」以下が追記した内容。
/app/Config/bootstrap.php
<?php
// Attach Events
App::uses('HogeControllerEventListener', 'Event');
App::uses('CakeEventManager', 'Event');
CakeEventManager::instance()->attach(new HogeControllerEventListener());
参考記事
- コールバックはもう古い!CakePHPのEventを使おう
http://blog.candycane.jp/%E3%83%96%E3%83%AD%E3%82%B0/2012/12/04/%25e3%2582%25b3%25e3%2583%25bc%25e3%2583%25ab%25e3%2583%2590%25e3%2583%2583%25e3%2582%25af%25e3%2581%25af%25e3%2582%2582%25e3%2581%2586%25e5%258f%25a4%25e3%2581%2584%25ef%25bc%2581cakephp%25e3%2581%25aeevent%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%258a%25e3%2581%2586.html - プラグイン開発について | baser CMS
http://basercms.net/manuals/3/programmers/4.html