2007年

CakePHP flash メソッドでレイアウトを指定する このエントリーを含むはてなブックマーク

CakePHP Add comments

コントローラ毎にレイアウトを変えていていると flash メソッドは使えないなあと思っていたのですが、下記のようにすることによりレイアウトをコントローラで指定できますね。

/app/app_controller.php に下記の flash メソッドを追加

function flash($message, $url, $pause = 1) {
    $this->autoRender = false;
    $this->autoLayout = false;
    $this->set('url', $this->base . $url);
    $this->set('message', $message);
    $this->set('pause', $pause);
    $this->set('page_title', $message);

    if (file_exists(VIEWS . 'layouts' . DS . $this->layout.'_flash.thtml')) {
        $flash = VIEWS . 'layouts' . DS . $this->layout.'_flash.thtml';
    } elseif ($flash = fileExistsInPath(LIBS . 'view' . DS . 'templates' . DS . "layouts" . DS . 'flash.thtml')) {
    }
    $this->render(null, false, $flash);
}

これで、
/app/views/layouts/指定したレイアウト名_flash.thtml
というレイアウトファイルがあれば、それを使用して
なければ、デフォルトの flash.thtml を使用します。

やっていることはすごく単純でコントローラクラスの flash メソッドをオーバライドして、使用するレイアウトファイルを選択するところで

if (file_exists(VIEWS . 'layouts' . DS . 'flash.thtml')) {
    $flash = VIEWS . 'layouts' . DS . 'flash.thtml';
}

となっていたところを

if (file_exists(VIEWS . 'layouts' . DS . $this->layout.'_flash.thtml')) {
    $flash = VIEWS . 'layouts' . DS . $this->layout.'_flash.thtml';
}

に変更しただけです。

他にいい方法があれば教えてください。

関連する投稿

One Response to “CakePHP flash メソッドでレイアウトを指定する”

  1. » CakePHPで便利な「Flash」の使い方。 デジタル料理人: Web業界やシステム、ゲームから精神論まで。何でも書きまくるブログです。 Says:

    [...] 詳しいのがもう既にブログにあったりして・・・。 Sun Limited Mt. [...]

Leave a Reply

Additional comments powered by BackType

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン