ある選択値によって次項のセレクトボックスの中身を変えたいとき。
■CakePHP
・Controller
public function getOptions($id = null) {
$list = $this->SampleModel->getOptions($id);
$this->set('optionList', $list);
$this->layout = false;
}
単にリストを設定しているだけだが、ポイントは「$this->layout = false;」こいつがいないとdefault.ctpを丸ごと返却してしまう。
・View
上記のコントローラのfunctionの対になるもの
<?php foreach ($optionList as $k => $v): ?>
<option value="<?php echo h($k);?>"><?php echo h($v);?></option>
<?php endforeach; ?>
コントローラ内のセット名「'optionList'」に合わせる。
・Model
public function getOptions($id = null) {
// デフォルト値
$result = array("" => "選択してください");
$query = array(
'fields' => array('id', 'name'),
'order' => array('SampleModel.id ASC')
);
if (!empty($id)) {
$query = $query + array('conditions' => array('SampleModel.id' => $id));
}
$result = $result + $this->find('list',$query);
return $result;
}
■jQuery
$('#first-select').bind("change keyup", function() {
var id = $("#first-select").val();
$("#change-select").load( "./getOptions/"+id);
});
idがfirst-selectの値が変更されたとき、idがchange-selectであるセレクトボックスにoptionのリストを読み込ませている。