この記事はCakePHP1.2系の頃に書かれた記事です。1.3系,2系では使えないと思われますのでご注意ください。
1.3系は「[CakePHP]1.3系でsetFlashのレイアウト(エレメント)を変更する方法 | HappyQuality」に記載しております。
先ほどのエントリーに続いてSession::setFlash()だとかの話。
(先ほどのエントリー、問題があったので一部修正させていただきましたm_ _m)
調べてみると、Session::setFlash()は第2引数でlayoutを指定できるらしい。。知らなかった…orz
で、使い方ですが、
コントローラで以下のようにレイアウトを指定してSession::setFlash();する。
// Session::setFlash($message, $layout = 'default', $params = array(), $key = 'flash'); $this->Session->setFlash("エラーですよ\n大変なことです", "flash/mylayout");
上記の例だと、レイアウトをflash/mylayoutで指定しているので、
/app/views/layouts/flash/mylayout.ctpを作成して読み込ませます。
肝心のレイアウトファイルからsetFlashしたメッセージを表示する方法ですが、
$content_for_layoutで表示できます。
サンプル:/app/views/layouts/flash/mylayout.ctp
<div class="message"> <p class="attention"> <?PHP echo nl2br($content_for_layout); ?> </p> <p class="inquiry"> 詳細は<?PHP echo $html->link("お問い合わせフォーム", "/inquiry"); ?>よりお問い合わせください。 </p> </div>
この方法だと、上記のように$content_for_layoutに対してnl2brしてあげればいいだけですし、
setFlashした内容を表示するブロックに、お問い合わせフォームのリンクを置いたり、ヘルプをセットしたり、ツールチップをセットしてみたり、デザインに凝ってみたり好き勝手できますよね^^
setFlashを調べてたら思わぬ収穫があってラッキーでした。
きっとCakePHPにはまだまだたくさん「知ってれば得をすること」があるんでしょうね。