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 を設定に変更です。
無理矢理感はありますが、これでなんとか思った通りの出力に変更できました。