Formヘルパーのdatetimeのセレクトボックスで、簡単に下記のような感じで”年月日”区切りにする。
(1) /lib/Cake/View/Helper/FormHelper.phpを、/app/View/Helperにコピーする。
(2)コピーしたFormHelper.phpの、下記の部分を修正する。
//$opt = implode($separator, $selects);
$opt = "";
$i = 0;
if (is_array($separator)) {
foreach($selects as $select) {
$opt .= $select.$separator[$i];
$i++;
}
} else {
$opt = implode($separator, $selects);
}
(3)コントローラーでdatetime()のオプション配列をつくってビューに渡す
$date_option = array(
'minYear' => 1930,
'maxYear' => date('Y'),
'separator' => array('年','月','日'),
'value' => array('year' => date('Y'),'month' => date('m'),'day' => date('d')),
'monthNames' => false
);
$this->set(compact('date_option'));
(4)ビューでdatetime関数を使う
<?php echo $this->Form->dateTime('birthday','YMD','NONE',$date_option)?>
以上です。
ちなみに、今日から1年後まで選択できるようにしたい場合は、オプションを下記のような感じにする。
$start_time_option = array(
'minYear' => date('Y'),
'maxYear' => date('Y', strtotime(date('Y-m-1').' +1 year')),
'separator' => array('年','月','日'),
'value' => array('year' => date('Y'),'month' => date('m'),'day' => date('d')),
'monthNames' => false
);
$this->set(compact('start_time_option'));
参考文献:
CakePHP1.2 HTMLヘルパーの日付コンボを年月日で表示する
【CakePHP2.2.0】dateTimeで初期値を設定する
1件のコメント
jake · 01/29/2014 14:57
フォームヘルパーの簡単な改造を教えていただきありがとうございます!
とても役に立ちました。
日本語環境以外で使うことのないプロジェクトだったので、
$optionにseparatorを入れる部分をformHelperに直で書き込みました。
ついでに変更箇所のすぐ上にあるswitch文にこれを追加:
case ‘m’:
$attrs[‘Month’][‘value’] = $month;
$attrs[‘Month’][‘monthNames’] = $month;
$selects[] = $this->month($fieldName, $attrs[‘Month’]);
break;
して、YMDではなくYmDの場合はJanuaryなどのMonth namesではなく、「01」月などのような形で取得できるようにしてみました。