2013-06-19_050215

こんな感じで、日時ドロップダウンリストの表示を、デフォルトの「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側の変更は不要なので楽です。


Tagged on:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>