Pocket
LINEで送る

Formヘルパーのdatetimeのセレクトボックスで、簡単に下記のような感じで”年月日”区切りにする。
スクリーンショット 2013-05-23 0.07.56

(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で初期値を設定する

Pocket
LINEで送る

カテゴリー: プログラミング

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」月などのような形で取得できるようにしてみました。

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。