2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[baserCMS]プラグインを用意せずにイベント処理を発動させる方法例

Last updated at Posted at 2015-02-14

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());

参考記事

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?