モジュール毎にデフォルトレイアウト指定する

やりたいこと

デフォルトのレイアウトファイルを
defaultモジュールでは
default/layout/default.phtml
adminモジュールでは
admin/layout/default.phtml
masterモジュールでは
master/layout/default.phtml
のようにしたい。
かつ、各コントローラー毎にレイアウトファイルを簡単に変更したい。

方針

  1. Zend_Controller_Actionクラスを継承した抽象クラスCustom_Controller_Actionを

/library/Controller/Action.phpに作成

  1. モジュール内のコントローラクラスはCustom_Controller_Actionを継承して作成

Custom_Controller_Action

<?php
abstract class Custom_Controller_Action extends Zend_Controller_Action
{
    public $layout;
    public $request;
    // この値を子クラスで書き換えることでデフォルトのレイアウトファイルを変更
    public $layout_name = 'default';

    public function init()
    {
        $this->request = $this->getRequest();
        // レイアウトパスを設定
        $module       = $this->request->getModuleName(); // 現在のモジュール名を取得
        $layout_path  = Zend_Registry::get('webappDir') . "/application/" . $module . "/layout";
        $this->layout = $this->_helper->layout;
        $this->layout->setLayoutPath($layout_path);
        $this->layout->setLayout($this->layout_name);
    }
}

モジュール内のアクションクラス

<?php
/**
 * master/controller/IndexController.php
 * 
 */

class Master_IndexController extends Custom_Controller_Action
{
    public $layout_name = "hoge"; // ここを適宜書き換え
    public function indexAction() 
    {
    ....
    }
}

これで各コントローラーのレイアウトが簡単に変更できる