edo1z blog

プログラミングなどに関するブログです

cakePHP2.3 Formヘルパー datetimeのセレクトボックスを年月日区切りにする

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