ZendFrameworkでZend_Layoutを利用する

■ポイント
要はワイヤーフレームのテンプレートと、部品を分けましょうって考えのもとに
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'); 

ZendFrameworkでmoduleを利用する

■ポイント

Zend_Controller_Front->addModuleDirectory($path)でモジュールを追加する。
この場合、通常のcontrollersは利用できなくなるので注意

■コード
index.php に次のようなコードを追記する

$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory(APP . '/Modules');
$front->dispatch();

■ディレクトリ構造

Application
 ├Controllers(x ここは利用できなくなる)
 ├public (公開ディレクトリ
 ├Modules (←コードを見てわかるようにコードで指定するので名称は何でもよい)
  ├default
  │ ├Controllers
  │ ├Views
  │  ├layouts
  │  ├scripts
  ├app1
  ├app2