0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cakephp 2.x 自作のFormHelper

Posted at

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>')
        )
    );
?>

まあ、でもこれはやる価値ある気持ちよさですよ。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?