7月
15
2009
0

[CakePHP]Session::setFlash()したメッセージをオリジナルのレイアウトで表示する
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

先ほどのエントリーに続いて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にはまだまだたくさん「知ってれば得をすること」があるんでしょうね。

Written by suzukenn in: メモ | タグ: ,
7月
15
2009
0

[CakePHP]$session->flash()内で改行できるようにする
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

コントローラで$this->Session->setFlash();でメッセージをセットすると、ビューの$session->flash();で出力されますよね?
でも、改行ができなくて困る。と思ったことありません?

というわけで、簡単に改行できる方法をメモ。
最初に書いた方法だと$this->Session->setFlash();の第2引数、$layoutを指定したときに問題があるので修正しました。適当なこと書いてごめんなさいm_ _m

  1. /cake/libs/view/helpers/session.phpを/app/views/helpersにコピー
  2. session.phpのflash()メソッドの該当箇所を下記のように修正。
    if ($flash['layout'] == 'default') {
        if (!empty($flash['params']['class'])) {
            $class = $flash['params']['class'];
        } else {
            $class = 'message';
        }
        $out = '<div id="' . $key . 'Message" class="' . $class . '">' . $flash['message'] . '</div>';
        // ↑この行を↓のように修正
        $out = '<div id="' . $key . 'Message" class="' . $class . '">' . nl2br($flash['message']) . '</div>';
    } elseif ($flash['layout'] == '' || $flash['layout'] == null) {
        //  省略
    } else {
        // 省略
    }
    // ↓
    
  3. あとはコントローラから$this->Session->setFlash();する際、改行を挟みたい箇所に\nを入れるだけ。

ちなみに$this->flash();に、上記と同じ方法で改行を入れる場合は、/app/views/layouts/flash.ctpの該当箇所を

<?php echo $message; ?>
// ↓以下に修正
<?php echo nl2br($message); ?>

にしてやればOK

もっと簡単な方法、効率的な方法があれば教えていただけると嬉しいです^^

Written by suzukenn in: メモ | タグ: ,
7月
10
2009
0

[CakePHP]DebugKitとQdmailを一緒に使うときの注意
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

cakephperさんがキャプチャつきで詳しく解説してくれているDebugKitですが、本当に便利で助かります。
良く今までこれを使わず開発してたな!と(笑)言うくらい便利。無いと困る、もう。

同じくCakePHPの超便利なコンポーネント、Qdmailというメール送信コンポーネントがあるのですが、Qdmailの素晴らしい機能のひとつ*1 としてCakePHPのレイアウトとエレメントを利用してメール本文を生成できるという点があります。

そのため、コントローラで$this->setした値をメール本文で容易に使えるというメリットがあるのですが、DebugKitとQdmailを併用するとこの機能に障害が出てしまいます*2

調べたところ、DebugKitが$this->viewの値を”View”→”DebugKit.Debug”に変えてしまうのがまずいようです。

ですので、とりあえずの対処としてメール送信を行うアクションでは、

$this->view = "View";

をセットして無理やりQdmail側のエラーを防ぐ形で対処しました。
もちろん、このアクションではDebugKitは使えなくなります。

core.phpのdebug値を0にすればDebugKitの効果が切れるので上記対処を行わなくても、debug値0なら問題ないと思いますが、開発中にメール送信を確認したい場合はとりあえず上記で対応できると思います。

恐らくQdmailをいじればDebugKitとの共存もできるような気がするのですが、誰か実現しましたら教えてくださいませ(笑)

  1. 他にもすごくたくさん素晴らしい機能があります。文字化けしないとか、携帯の絵文字に対応してるとか、添付ファイルも簡単に添付できたり、HTMLメールも簡単につくれたり、何でもできちゃう []
  2. Qdmail::text()で本文をセットするのは問題ないのですがQdmail::cakeText()で本文をセットしようとするとエラーが出てメール送信できません []
Written by suzukenn in: メモ | タグ: ,
6月
30
2009
0

[CakePHP]Viewからヘッダにスクリプトを追加する($script_for_layoutを利用)
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

各ビューファイルから内にスクリプトを追加する方法のメモ

// $javascript->linkでファイルを読み込む方法
echo $javascript->link("test", false);  // 第2引数をfalseするとレイアウトの$script_for_layoutに展開される

// スクリプトをヘッダに表示する方法
echo $javascript->codeBlock("コード", array("inline" => false)); // 第2引数にarray("inline" => false)を渡すとレイアウトの$script_for_layoutに展開される
Written by suzukenn in: メモ | タグ: ,
6月
16
2009
0

[CakePHP]組み込みバリデーションルール(マニュアル)
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

数値の大小判定をするバリデーションルールをCakePHP ポケットリファレンスで探したら載ってなくて、久しぶりにマニュアル見たらびびった(笑)

組み込みのバリデーションルール(Validation Rules) :: データのバリデーション(Data Validation) :: CakePHPによる作業の定石 :: マニュアル :: 1.2 Collection :: The Cookbook
知らなかったルールが山ほど!!なにこれ?増えたの?

とりあえず目的の数値の大小判定は”comparison”とわかったし、
”date”や”equalTo”,”extention”,”isUnique”まで!?(今までずっと自作メソッド使ってた…orz)
”Multiple”とか”inList”なんて知ってれば使いどころがあったのになぁ。
たまにマニュアル見たほうがいいですね^^)

更新を見逃さないようにfirefoxにrssフィードを登録しておきました♪

追記
dateとequalToはリファレンスに載ってた^^;

Written by suzukenn in: メモ | タグ: ,

| I have been indebted to Aeros Theme. | Background image owner is NASA.