CakePHPで二次元配列のチェックボックス
CakePHPのFormヘルパーに二次元配列を渡してチェックボックスを出力した時のメモです。
モデリング
親カテゴリ(CategoryParent)、子カテゴリ(Category)それぞれテーブルに分かれてて、親カテゴリが子カテゴリにhasManyでアソシエーションしてると仮定します。
Controller
$catagory_options = $this->Category->find( 'list', array( 'fields' => array('Category.id', 'Category.category', 'CategoryParent.skill') ));
Controllerの処理で下記の配列が返ってきます。
array( '親カテゴリhoge' => array( (int) 2 => 'ajax', (int) 6 => 'backbone.js', (int) 8 => 'Bootstrap', (int) 13 => 'CoffeeScript', ), '親カテゴリfoo' => array( (int) 11 => 'CentOS', (int) 30 => 'UNIX' ), ... )
view
echo $this->Form->input('category_id',array( 'type' => 'select', 'multiple' => 'checkbox', 'options' => $category_options ));
Formヘルパーで、multiple
にcheckbox
を指定、options
に先ほどの配列を指定すると下記のようなHTMLが出力されます。
<fieldset> <legend>親カテゴリhoge</legend> <label for="CategoryId2" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="2" id="CategoryId2" /> ajax</label> <label for="CategoryId6" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="6" id="CategoryId6" /> backbone.js</label> <label for="CategoryId8" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="8" id="CategoryId8" /> Bootstrap</label> <label for="CategoryId13" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="13" id="CategoryId13" /> CoffeeScript</label> <label for="CategoryId27" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="27" id="CategoryId27" /> Foundation</label> <label for="CategoryId44" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="44" id="CategoryId44" /> json</label> <label for="CategoryId116" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="116" id="CategoryId116" /> レスポンシブWebデザイン</label> </fieldset> <fieldset> <legend>親カテゴリfoo</legend> <label for="CategoryId11" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="11" id="CategoryId11" /> CentOS</label> <label for="CategoryId30" class="checkbox-inline"><input type="checkbox" name="data[category_id][]" value="30" id="CategoryId30" /> CentOS</label> </fieldset>
このような具合に親カテゴリ毎にfieldset
でグループ分けして出力されます。
Comment
コメント(0)
コメントはまだありません。
コメントする
Trackback(0)