Skip to content

Instantly share code, notes, and snippets.

@n1215
Last active February 8, 2016 01:06
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save n1215/b46e3ee445cf934b40ff to your computer and use it in GitHub Desktop.
Save n1215/b46e3ee445cf934b40ff to your computer and use it in GitHub Desktop.
baserCMS 共通のビュー変数を利用する設定
<?php
/**
* {テーマのディレクトリ}/Config/bootstrap.phpとして配置する
* テーマ内で <?php echo $siteTitle ?> などと通常のビュー変数同様に利用可能
*/
/**
* 今回のビュー変数に限らず、テーマ用の設定はまとめておくとすっきりする
*/
$config['MyTheme'] = array(
'viewVars' => array(
'siteTitle' => 'サイトタイトル',
'startYear' => '2015',
),
);
/**
* Configureクラスで設定を書き込んでおくとテンプレート内でも利用できる
* イベントリスナーを使わずこれだけでもビューで共通の設定を利用することは可能
* ただし長くて鬱陶しい
* ex. <?php echo Configure::read('MyTheme.viewVars.siteTitle') ?>
*/
Configure::write('MyTheme', $config['MyTheme']);
/**
* イベントリスナーを設定
*/
//テーマのEventディレクトリをクラスの読み込み元として追加登録
App::build(array(
'Event' => array(dirname(__FILE__) . '/../Event/')
));
//利用するクラスを読込
App::uses('ViewVariablesEventListener', 'Event');
App::uses('CakeEventManager', 'Event');
//イベントリスナーを登録
$eventListener = new ViewVariablesEventListener(Configure::read('MyTheme.viewVars'));
CakeEventManager::instance()->attach($eventListener);
<?php
/**
* Class ViewVariablesEventListener
* {テーマのディレクトリ}/Event/ViewVariablesEventListener.php
*/
class ViewVariablesEventListener extends BcViewEventListener {
/**
* 登録イベント
*
* @var array
*/
public $events = array(
'beforeRender',
);
/**
* すべてのビューで共有させるビュー変数
* @var array
*/
private $variables = array();
/**
* コンストラクタ
* @param array $variables ビュー変数の配列
*/
public function __construct(array $variables) {
parent::__construct();
$this->variables = $variables;
}
/**
* beforeRender
* ビューテンプレートの読込前の処理
* 共通のビュー変数を追加する
* @param CakeEvent $event
*/
public function beforeRender(CakeEvent $event) {
/**
* @var View $view
*/
$view = $event->subject();
foreach($this->variables as $key => $val) {
$view->set($key, $val);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment