CakePHP 2.1がリリースされました。2.0から大きく変わる部分は少ないですが、2.1での目玉機能の一つとしてView blocksが挙げられます。
Viewの指定した部分をバッファリングして、後で呼び出すことができる機能ですが、1.3/2.0系でも似たようなことができるヘルパーメソッドを作成していたので公開します。
個別のビューでバッファリングした要素を、レイアウトctpなどから後で呼び出すことができるので、ビュー別のサイドバーカスタマイズなどに利用できます。
2.1のView blocksとの違いは、ViewクラスのメソッドではなくHelperクラスのメソッドであること、start/endによるバッファリングではなく、指定エレメントファイルをバッファリングするものであることです。
コード
コードは以下。AppHelperか任意のHelperに追加します。
element buffering for CakePHP 1.3/2.0 — Gist
CakePHP 1.3用
CakePHP 2.0用
サンプルコード
基本的なサンプルは以下になります。
任意のアクションビュー
< ?php $this->Html->appendElement('one'); // oneエレメントをバッファリング $this->Html->appendElement('two'); // twoエレメントをバッファリング ?> |
レイアウト
< ?php echo $this->Html->getAttachedElements(); // バッファリングした要素を全て書き出し。oneとtwoの内容が出力される ?> |
バッファリングブロック名を指定するには、第2引数のblockNameパラメータで指定します。
< ?php $this->Html->appendElement('one', array('blockName' => 'sidebar')); $this->Html->appendElement('two', array('blockName' => 'sidebar')); $this->Html->appendElement('three', array('blockName' => 'footer')); ?> |
レイアウト
< ?php echo $this->Html->getAttachedElements('sidebar'); // one / two echo $this->Html->getAttachedElements('footer '); // three ?> |
その他
appendElementメソッドの引数は、View::element()メソッド互換です。
getAttachedElementsメソッドは、第2引数として $separeter
、第3引数として $wrap
を取ります。
$separeter
では、バッファリングした各エレメントを結合する文字列を指定できます。
$wrap
は、バッファリングした各エレメントを括るタグを指定できます。
例:
< ?php echo $this->Html->getAttachedElements('sidebar', '<hr />', array('div' => array('class' => 'side-content'))); ?> |
なお、特にヘルパーメソッドである理由もないので、Viewクラスを拡張してそちらに移植してもよいかもしれません。