Nullyのぶろぐ

仙台から東京へ転勤したエンジニアのブログ

Moduleを利用し個々のLayoutを利用する

自サイトを作る上で、どうやれば良いのかを検証してみて、余りスマートでは無いかもしれないが、思いついたのでメモ!

まずは作る

まずは適当にzf create project でプロジェクトを作成します。

作成完了後、以下のようにmodule群を作る。

zf create module '[module_name]'

これでモジュールをいくつか作る。

※module_nameは作成するモジュール名を入力します

作ったら

applications/application.ini内でlayoutに関する項目を設け、パスの定義を記述します。

layout.path = APPLICATION_PATH "views/layouts"

iniの設定が完了したら

applications/Bootstrap.php内で、「protected function _initLayout」等のようなメソッドを定義します。

定義したらば、以下のように記述。

$layout = $this->getOption("layout") ; // application.iniで定義したlayout項目を取得

new Zend_Layout($layout["path], true) ; // 新規Layout を定義する

ここまでで、layoutまでのパスを定義が完了。

Layoutパスなどの定義が完了したら

module内にあるcontrollers/以下のinitメソッドにて、以下のように記述します。

$request = $this->getRequest() ;

$module = $request->getParam("module") ;

$this->_helper->layout->setLayout($module) ;

これでモジュール単位のレイアウトを呼び出すことが可能になります。

メソッドの定義が完了したら

先ほどiniファイルで定義したパスに「module名.phtml」でhtmlベースを作成し保存します。

これで全ての作業が完了です。

もっとスマートに出来るよ!という情報があれば教えていただければと思います。。。

PS.

本当はBootstrap.php内でレイアウトの呼び出しもすませたかったのですが、どうにもZend_Controller_Request_Httpとか使っても、Requestオブジェクトにmodule名などが入ってこなかったのでこんな形になりました。。。