■ポイント
要はワイヤーフレームのテンプレートと、部品を分けましょうって考えのもとに
Layoutはワイヤーフレーム、ViewScriptは部品という感じになりそう。
Zend_Layout::startMvc($config)でセットアップする。
これを行うとZendControllerActionで自動的にlayoutを使うようになる。
■コード
$layout = Zend_Layout::startMvc( array( 'layoutPath' => array( APP .'/views/layout', ), 'layout' => 'sideLeft', //デフォルトのレイアウト ) );
layoutPath | レイアウトファイルを配置するディレクトリパスを指定する |
---|---|
layout | デフォルトで利用するレイアウトファイル名を指定する |
※layoutを使いたくない場合は
Actionクラスで
$this->_helper->layout->disableLayout();
を実行する。
■ディレクトリ構造
Application
├Controllers
├Views
├layouts
├sideLeft.phtml
├scripts
【module型コントローラと併用する場合】
基本的にはmodule型でない場合と一緒。
但し、module型を利用する場合、Applicationで1つのサイトを構成していることが多いと思います。
このような場合、共通のレイアウトを置いておく場所が欲しくなりますよね!?
で、私は次のようにしました。
■ディレクトリ構造
Application
├Views ←ここにもViewsを追加
├layouts
├scripts
├Modules (←何でもよい)
├default
│ ├Controllers
│ ├Views
│ ├layouts
│ ├scripts
├app1
├app2
index.php
$layout = Zend_Layout::startMvc( array( 'layoutPath' => array( APP .'/Views/layout'), //↑ここにで追加したViews/layoutのパスを指定 'layout' => 'sideLeft', ) );
このようにすると、「実行中のモジュールのviews/layout」と「追加したViews/layout」の2か所にlayoutのPathが通ります。
ただ、このままだと「追加したViews/scripts」にはパスが通ってないのでそちらは別途設定する必要がありました。
Actionクラスのinit等で次を追加してください
this->view->addScriptPath(APP .'/Views/scripts');