Pictnotes メインイメージ

お仕事メモ

FormHelper 複数checkboxの出力を調整する

CakePHP 2.x の FormHelperで、関連するチェックボックスのタグを出力するときのタグの調整



CakePHP2.xで、関連するチェックボックスをFormHelperを利用して出力しようとすると かならず、devタグで囲まれてしまいます。これをどうにかしたくてFormHelperに手を入れました。 FormHelperの、_selectOptions メソッドのほぼ最後のあたりで

$label = $this->label(null, $title, $label);
$item = $this->Html->useTag('checkboxmultiple', $name, $htmlOptions);
$select[] = $this->Html->div($attributes['class'], $item . $label);

のぶぶんで、強制的に devタグをつけられています。
classの設定をdevタグの部分で実装しているので、そうなっているみたいです。class => false にしていても
強制的に class=>'checkbox' をつけられる鬼仕様でした。
なので、
<li><input type="checkbox" name="hoge" value="1" id="hoge" class="checkbox_area" /><label for="hoge">アジア</label></li>
とかの状態のHTMLが生成できないので無理矢理修正

'multiple'=> 'checkbox',で、 'class'=> 'checkbox_area'の場合のみ挙動が代わるようにしました。

 

$label = $this->label(null, $title, $label);
if( $attributes['class'] == 'checkbox_area' ){
    $htmlOptions['class'] = $attributes['class'];// add customize
    $item = $this->Html->useTag('checkboxmultiple', $name, $htmlOptions);
    $select[] = $this->Html->tag('li', $item . $label);
} else {
    $item = $this->Html->useTag('checkboxmultiple', $name, $htmlOptions);
    $select[] = $this->Html->div($attributes['class'], $item . $label);
}

とclass名で条件分岐を作成、checkbox_areaの場合は、最初のinput tagを生成する時に、classのoptionを追加してそちらにclassが入るように設定、で、liでかこみたいので、 html->dev でなく、 html->tag で li を設定に変更です。

無理矢理感はありますが、これでなんとか思った通りの出力に変更できました。

CakePHP   2015/03/13   admin