datepickerみたいなUIが普及した今となっては果たして存在意義があるのかどうかという感じだが、まあ、今でも日付入力に年と月と日で分けてselectにする人はいる。
で、CakephpのFormHelperも日付型のデータにはデフォルトで年月日分割selectになるようになっている。
そのカスタマイズ方法である。
まずMyFormHelperを作る。
場所はapp/View/Helper の中
classの中に今回自分がカスタマイズしたい部分を含むメソッドを丸ごとコピーする。
app/View/Helper/MyFormHelper.php
<?php
App::uses('FormHelper', 'View/Helper');
class MyFormHelper extends FormHelper {
public function dateTime($fieldName, $dateFormat = 'DMY', $timeFormat = '12', $attributes = array()) {
....略
}
}
?>
で、改造部分を記述する。詳しくは参考サイトを参照
app/View/Helper/MyFormHelper.php
if (is_array($separator)) {
$i = 0;
foreach($selects as $select) {
$opt .= $select . $separator[$i];
$i++;
}
} else {
$opt = implode($separator, $selects);
}
で、それを使うビューのコントローラに以下を追加。
app/Controller/NewsController.php
public $helpers = array('Form' => array('className' => 'MyForm'));
あとはビューのinput部分を書き換え
app/View/News/add.ctp
<?php echo $this->Form->input('post_date',
array(
'dateFormat' => 'YMD',
'minYear' => date("Y") -1,
'maxYear' => date("Y") + 4,
'monthNames' => false,
'div' => false,
'label' => false,
'separator' => array(
'<span>年</span>',
'<span>月</span>',
'<span>日</span>')
)
);
?>
まあ、でもこれはやる価値ある気持ちよさですよ。