I love iPhone, Android, Cocos2d-x
CakePHP flash メソッドでレイアウトを指定する
コントローラ毎にレイアウトを変えていていると 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'; }
に変更しただけです。
他にいい方法があれば教えてください。
関連する投稿
2 comments
コメントをどうぞ
Additional comments powered by BackType
[...] 詳しいのがもう既にブログにあったりして・・・。 Sun Limited Mt. [...]
3knights…
…