$form->inputで日時選択フォームのカスタマイズ
Formヘルパーで、日時選択フォームの出力をカスタマイズする方法。
以下の参考サイト:dateTime()による指定方法をベースに、
- input()による指定方法
および
- 月を英語以外で表示する方法
- プルダウンの最初を空欄にする/しない方法
参考サイト
CakePHP1.2 Form ヘルパーで日付のフォームを作る | Sun Limited Mt.
以下の$options設定および追加CSSでカスタマイズした出力
echo $form->input('disp_date', array( 'label' => __('Date', true), 'default' => date('Y-m-d H:i', strtotime($this->data['Model']['disp_date'])), 'timeFormat' => '24', 'dateFormat' => 'YMD', 'monthNames' => false, 'empty' => false, 'separator' => '/', 'maxYear' => date('Y'), ));
select { font-size: 100%; margin: 0 3px; }
input()で$optionsの主な設定
- label, default, timeFormat, dateFormat, separator, maxYear
以上それぞれの設定内容は、CookBookに記載があります。
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements#options-interval-757
ポイントはdefault。初期値はMySQLのdatetime(Y-m-d H:i:s)形式の値を受け付けないのでstrtotimeでタイムスタンプに変換が必要です。
なお、「2010年04月〜」のような表示は、年・月・日…個々のプルダウンを1つずつ出力するか、独自に拡張ヘルパーつくらないと、無理です。
月を英語以外で表示する方法
$options['monthNames'] を falseに指定すると、数字で表示されるようになります。
dateTime()でも、第4引数 (参考サイトの$attr) に、$attr['monthNames'] => false で、同様に数字になります。
また、formヘルパーのソースを見ると、月名は多言語化対応可能になっているので、翻訳ファイル等を設定すれば、「1月、2月…」や「卯月、如月…」という表示も、おそらく可能です。
cake/libs/view/helpers/form.php
case 'month': if ($options['monthNames']) { $data['01'] = __('January', true); $data['02'] = __('February', true); $data['03'] = __('March', true); (中略) } else { for ($m = 1; $m <= 12; $m++) { $data[sprintf("%02s", $m)] = strftime("%m", mktime(1, 1, 1, $m, 1, 1999)); } } break;
プルダウンの最初を空欄にする/しない方法
dateTime()ではデフォルトでプルダウンの最初が空白選択になりますが、input()ではデフォルトで空選択はありません。
$options['empty']に、上記の例ではfalseを指定していますが、trueを指定するとinput()でも空選択が表示されるようになります。
なおdateTime()だと、第5引数にfalse指定で空選択なしになります。