日付のセレクトボックスの作り方
開発環境:CakePHP2.5.1
日付のセレクトボックスを作るにはFormヘルパーを使うのが便利です。
ただし、初期状態では日本人には使いにくくなっていますので、少しカスタマイズが必要です。
日付のセレクトボックスの基本
まずは基本的な使い方です。
<?php echo $this->Form->input('birthday', array( 'type' => 'date', )); ?>
inputメソッドにtypeでdateを渡すだけで日付のセレクトボックスが作れます。
ですが、この状態だとJulyなど月が英語表記になっていて、並び順も月-日-年になっています。
日本的な日付のセレクトボックス
まずは日本的な並び順、そして月を数字に変更しましょう。
<?php echo $this->Form->input('birthday', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false )); ?>
dateFormatが並び順、monthNames=falseが英語表記をやめる指定になります。
年の最小値と最大値を指定
上記の例だと誕生日のセレクトボックスなので、年の部分に未来の日付があるのはうれしくありません。
ですので、年の最大値および最小値も指定してみましょう。
<?php echo $this->Form->input('birthday', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'maxYear' => date('Y'), 'minYear' => date('Y') - 100, )); ?>
最大値はmaxYear、最小値はminYearを使えば指定することができます。
ハイフンではなく年月日で表示
デフォルトの状態では年月日がハイフンで区切られています。
それを「年」「月」「日」で区切る形式に変更する方法です。
lib/Cake/View/Helper/FormHelper.phpを改造するので、ファイルをapp/View/Helper/にコピーします。
ファイル内のdateTimeメソッドにある下記の部分を改造します。
<?php $opt = implode($separator, $selects); ?>
上記の部分を次のように変更します。
<?php $opt = ''; if (is_array($separator)) { $i = 0; foreach($selects as $select) { $opt .= $select . $separator[$i]; $i++; } } else { $opt = implode($separator, $selects); } ?>
そして、ビュー側で、次のように指定します。
<?php echo $this->Form->input('birthday', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'maxYear' => date('Y'), 'minYear' => date('Y') - 100, 'separator' => array('年', '月', '日'), )); ?>
これで年月日の表示が日本語になります。