シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP]Session::setFlash()したメッセージをオリジナルのレイアウトで表示する


この記事は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にはまだまだたくさん「知ってれば得をすること」があるんでしょうね。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする