Zend_View用のフィルターで、コンテンツをZend_Dojoタブコンテナーに入れる
http://d.hatena.ne.jp/noopable/20090207/1233957428
これの続きで
要件
以上の要件を
http://d.hatena.ne.jp/noopable/20090206/1233872373
ここで、使用したScriptStackで実現する。
contentpane.php
コンテンツをcontentPaneでラップする
<?php $this->contentPane()->captureStart( $this->contentPaneId, array( 'title' => $this->tablabel, 'selected' => true, 'closable' => $this->closable, ), array( //'style' => 'background-color: lightgray;' ) ); echo $this->getFilter('ScriptStack')->getContent(); echo $this->contentPane()->captureEnd($this->contentPaneId);
tabcontainer.php
コンテンツをタブコンテナーでラップする
<?php $this->TabContainer()->captureStart( $this->subTabContainer, array( 'tabPosition' => "top", ), array( 'style' => "border: 1px solid #bfbfbf;width:100%; height:100%;" ) ); //単純にラップするだけなら、captureを使わない方法もある。 echo $this->getFilter('ScriptStack')->getContent(); echo $this->TabContainer()->captureEnd($this->subTabContainer);
コントローラーで以下のように指定する。
<?php $data['tablabel'] = '概要'; //必要なデータをアサインする $this->view->assign($data); //フィルターを登録する $this->view->addFilterPath('Flower/View/Filter', 'Flower_View_Filter_'); $this->view->addFilter('ScriptStack'); //フィルターで使用するスクリプトをアサインする。 $this->view->assign('scriptStack', array('tabcontainer.php','contentpain.php'));
これでビュースクリプトにはコンテンツの吐き出しだけを記述すればよく、共通するpaneによるラップに関してはビューから除外することができた。
レイアウトの上位階層から順に必要なラップをしながらタブ表示といった用途には重宝している。
条件指定として、scriptStackに与えるスクリプトを変更すれば、タブコンテナーではなく単純なdivに入れたり、構造だけ取得してRSSを吐いたりといった仕組みにも容易に流用できる。