こんな感じで、日時ドロップダウンリストの表示を、デフォルトの「2013-06-19 12:00」から「2013年06月19日 12時00分」に変更する方法です。
まず、lib/Cake/View/Helper/FormHelper.php を app/View/Helper にコピー。
コピーしたFormHelper.phpの2429行目からを下記に変更。
$selects = array(); foreach (preg_split('//', $dateFormat, -1, PREG_SPLIT_NO_EMPTY) as $char) { switch ($char) { case 'Y': $attrs['Year']['value'] = $year; $selects[] = $this->year( $fieldName, $minYear, $maxYear, $attrs['Year'] ).'<span style="font-weight:normal;">年</span>'; break; case 'M': $attrs['Month']['value'] = $month; $attrs['Month']['monthNames'] = $monthNames; $selects[] = $this->month($fieldName, $attrs['Month']).'<span style="font-weight:normal;">月</span>'; break; case 'D': $attrs['Day']['value'] = $day; $selects[] = $this->day($fieldName, $attrs['Day']).'<span style="font-weight:normal;">日 </span>'; break; } } $separator=''; $opt = implode($separator, $selects); $attrs['Minute']['interval'] = $interval; switch ($timeFormat) { case '24': $attrs['Hour']['value'] = $hour; $attrs['Minute']['value'] = $min; $opt .= $this->hour($fieldName, true, $attrs['Hour']) . '<span style="font-weight:normal;">時</span>' . $this->minute($fieldName, $attrs['Minute']); break; case '12': $attrs['Hour']['value'] = $hour; $attrs['Minute']['value'] = $min; $attrs['Meridian']['value'] = $meridian; $opt .= $this->hour($fieldName, false, $attrs['Hour']) . '<span style="font-weight:normal;">時</span>' . $this->minute($fieldName, $attrs['Minute']) . ' ' . $this->meridian($fieldName, $attrs['Meridian']); break; } return $opt.'<span style="font-weight:normal;">分</span>';
Modelの$validateで必須入力としている場合、年月日時分の表示が太字になってしまったので、「font-weight:normal」としています。
使い方は通常どおり。
<?php echo $this->Form->input('st_date', array('type' => 'datetime', 'label' => '掲載開始日', 'class'=>'input-small', 'dateFormat' => 'YMD', 'timeFormat' => '24', 'monthNames' => false, 'empty' => false, 'interval' => 15, 'minYear' => 2012)); ?>
この方法ではアプリケーションの全ての日時ドロップダウンリストの表示が変更になります。やや強引ですが、View側の変更は不要なので楽です。