概要
CakePHPのFormヘルパーのdatetimeのパラメータをいっつも忘れてそのたびにFormヘルパーのソースを調べるのが馬鹿らしくなってきたのでここら辺でメモしておきます。
パラメータ
FormHelper::datetime($fieldName, $dateFormat = ‘DMY’, $timeFormat = ’12’, $selected = null, $attributes = array(), $showEmpty = true)
$fieldName:
モデル.フィールド名。いつもどおり。
$dateFormat:
年月日の並び順。不要な場合は”NONE”を指定。そのほかは以下のとおり。
- “DMY”
- “MDY”
- “YMD”
$timeFormat:
時間の表示形式。”12″もしくは”24″。不要な場合は”NONE”を指定。
$selected:
初期選択値の指定。指定方法は以下のとおり。
$selected =array( "day" => "01", "month" => "01", "year" => "2009" );
他にも指定できるみたいだけど僕は使わないのでスルー。
$attributes:
要素の属性。独自の要素もたくさんある。以下のとおり。
- $attributesの独自要素
-
“minuteInterval”:
分の刻み方指定。15分ごととか30分ごととか指定できる。“minYear”:
リスト中最小の西暦年。“maxYear”:
リスト中最大の西暦年。“separator”:
リストボックスの区切り文字。“interval”:
※なんだろ?誰か教えてください。$this->hourにパラメータ渡してるみたいだけど。“monthNames”:
月のリストをアルファベット表記にするかどうか。日本人ならfalse指定でしょ。
$showEmpty:
リストに空行を表示するかどうか。
tips1
あと、表に出すアプリケーションの場合、リストをつなぐセパレータを工夫して□年□月□日にしたり。
form.php datetime()
?省略? $opt = implode($separator, $selects); // を以下のようにしたりする。 // $separatorにarray("年", "月", "日");のように配列を入れた場合に条件分岐 $opt = ""; $i = 0; if (is_array($separator)) { foreach($selects as $select) { $opt .= $select.$separator[$i]; $i++; } } else { $opt = implode($separator, $selects); } ?省略?
動かして検証してないので駄目だったら直してください。こんな感じでいけるはずです。
tips2
もう一個tips。
FormHelper::datetime()で出力したフォームから受け取ったデータを結合するメソッドの紹介。
Model::deconstruct("Model.field", $data(array)); // 例えば… $this->Post->deconstruct("Post.datetime", $this->data['Post']['datetime']);
もっと簡単に書ければいいんですけどね。fieldだけ指定すれば勝手にやってくれるとかね*1 。
ver1.1系だとController::cleanUpFields($modelName)っていう素敵なメソッドがあったみたいなんですけどね。
参考資料:
CakePHP使いなら必ず持っておくべき一冊。
[tmkm-amazon]4774135038[/tmkm-amazon]
- ソースをいじれば簡単にできそうですが・・きっとやらない理由があるんでしょうね。ということもあって僕はコア部分のソースはいじらないことに決めてます。 [↩]
コメント
はじめまして。
検索でここまでたどり着きました。
とても参考にさせてもらいました。
ひとつ質問です。
$selectedについてですが、
時刻の初期設定を行いたいのですが、どのようにやればいいのでしょうか?
ご存知でしたら教えていただけますでしょうか。
よろしくお願いします。
初期値を12時に指定したい場合
「”hour” => “12”」としましたが、できませんでした。
crescensさん、こんにちは。
お返事遅くなってすみません^^;
こういう場合/cake/libs/view/helpers/form.phpを読むとすぐに答えが見つけられると思いますよ^^
第4引数$selectedに⇒”2009-04-22 10:45:00″でいけると思います。
ご回答ありがとうございます!
PHPもよく理解していないのに、開発を任せられて四苦八苦しているところでした。
私の上記のコメントですが、
こちらの間違いで、「”hour” => “12″」でも行けました。
もちろん、suzukennさんの方法でも確認とれました。
大変助かりました^^
crescensさん、こんにちは。
解決されたようでよかったです?^^
開発大変でしょうけれど、頑張ってくださいね。
もしお役に立てることがありましたらお気軽に声かけてください♪
そのときはサイドメニューのチャットを使っていただくとレスポンスがいいかも?