(cakePHP) selectタグを作りたい
HTMLヘルパーで select タグを表示させる方法です。マニュアルには載ってませんでした。
ほぼリンク的感じですが、cakepPHP先輩方に感謝です。
HTMLヘルパーに selectTag というのがあるのでこれを使うようです。
HtmlHelper::selectTag ( $fieldName, // フィールド名。コントローラからは、$this->params['data']で取得できる。 $optionElements, // 選択項目の名称 'array("1","2","3")など。' $selected = null, // 何番目が選択状態か(整数 or null) $selectAttr = array(), // SELECTエレメントの属性'array('onChange'=>'return this.form.submit();', 'class' => 'cssclassname') など。'(これがよくわからん) $optionAttr = null, // OPTIONエレメントの属性。$selectAttr と同じ方法。 $showEmpty = true, // 空項目を出力するか $return = false // true にすると、echo ではなく、return でデータが返る。 )
要は $optionElements に選択項目、 $optionAttr に optionタグの value が入るといった感じみたいですね。
そしてModel側から$optionElementsを使うには
$this->モデル単数名->generateList()
でできるみたいです。
ただし、これは cakePHP 1.1 の場合で 1.2 からはgenerateList()が非推奨になっているため find('list') を使う方法が推奨されてます。
1.1で find('list') を使ってみましたが、SQLのエラーが出ました。やはり1.2からじゃないと使えない?
generateList()は結構癖があるようです。
引数としては
$this->Model->generateList($conditions, $order,$limit, $keyPath, $valuePath);
$coditions :検索条件
$order :ソートの指定
$limit :取り出す数
$keyPath :配列のキーにするフィールド
$valuePath :配列の値にするフィールド
この$keyPath と $valuePath は {n}.Model.field というように {n} が必要だそうです。
ということが、CakePHP Model::generateList メソッドの {n}に書かれてます。
ということで都道府県テーブル(prefs)からselectタグを表示する例です。( generateList()の場合 )
//****コントローラ側の記述**** //検索条件、ソート、取り出す数は指定しない。キーはid , 値はname $prefs = $this->Pref->generateList("", "" , "" , "{n}.Pref.id", "{n}.Pref.name"); //ビューにセット $this->set('prefs', $prefs); //****ビュー側の記述**** //特に指定してないため初期値は空白値。結果は Member/pref_idに 入る。 <?php echo $html->selectTag('Member/pref_id', $prefs , null , null, null); ?>
参考:
SelectTag の使い方 cakePHPのフォーラムにて、selectTagの引数説明や取得方法について投稿されてます。
CakePHP HTMLヘルパーで select タグを表示する selectTagについてかなりわかりやすく書かれてます。
モデルの指定列からselectタグを作るのに便利な方法 1.2でselectタグ作るときの方法について分かりやすく説明されてます。
find('list')に少々ハマる1.2でfind('list')を使うときの注意点です。