baserCMS(CakePHP)には、プラグイン側から、処理途中に別の処理を割り込ませるイベント処理を手軽に作って利用することができます。
そのイベント処理ですが、たまーにプラグインを作るまでもなく実行したい場面があります。
( 三)<いや、そういうときってたいていの場面、専用の処理をプラグインにまとめておきたいときじゃね?
そんな意見はもちろんあります。が、ちょびっとだけ必要な場面もあるんです。
イベント処理の作成
イベント処理自体がないのに、先にイベントを呼び出そうとするともちろんエラーになります。
そのため、先ずは先に利用したい処理を作成しておきます。
とりあえず startup() とか作って、適当な文字列をエコーさせておくとかのテスト書いて、処理が通ることから確認すると良いです。
ここでは以下にサンプル例載せておきます。
ブログコンテンツIDが1のカテゴリアーカイブを表示し、そのカテゴリ名が info の場合は、1ページの表示件数を強制的に1,000件にしてみました。
というサンプルです。
<?php
/**
* [ControllerEventListener]
*
*/
class HogeControllerEventListener extends BcControllerEventListener {
/**
* 登録イベント
*
* @var array
*/
public $events = array(
'Blog.Blog.startup',
);
/**
* blogBlogStartup
* ブログのカテゴリアーカイブ表示の際、指定カテゴリではページ分割を無効化する
*
* @param CakeEvent $event
*/
public function blogBlogStartup(CakeEvent $event) {
$Controller = $event->subject();
if (!BcUtil::isAdminSystem()) {
if ($Controller->blogContent['BlogContent']['id'] == 1) {
if ($Controller->request->params['action'] == 'archives') {
if (isset($Controller->request->params['pass'][1])) {
if ($Controller->request->params['pass'][0] == 'category') {
if ($Controller->request->params['pass'][1] == 'info') {
$Controller->blogContent['BlogContent']['list_count'] = 1000;
}
}
}
}
}
}
}
}
イベント処理の追加
イベントが発動できるように、処理したいイベントリスナーをアタッチ(取り付け)します。2015/02/16 追記
setting.php は、Configureクラス用の設定ファイルなので、配列で設定だけを記述する。
なので bootstrap が良いのでは?というアドバイスいただきました。
■ 参考URL: http://basercms.net/functions/plugin_setting
というワケで、記述箇所は「/app/Config/bootstrap.php」が良さそうですね!
// Attach Events
App::uses('HogeControllerEventListener', 'Event');
App::uses('CakeEventManager', 'Event');
CakeEventManager::instance()->attach(new HogeControllerEventListener());
参考記事
あとがき
プラグインを作るほどでもないときは、こんな風にして手軽に処理を入れ込むことができます。
baserCMSはCakeの仕組みをそのまま使えるので便利ですね丶(・ω・)ノ
Qiita載っけときます。
■ http://qiita.com/materializing/items/64aa5d6fdc1978ada4f1
ちなみに冒頭のキャラはアイザックさんです。
(; 三)<確かにゲーム中は色んなイベントあるけどこんなとこで呼び出さんでもいいやん