CakePHP中的国家/州下拉列表

时间:2009-12-07 13:49:57

标签: cakephp

如何使用表单助手处理视图中的依赖组合框。例如:

国家/地区选择框(选择国家/地区将过滤掉所选国家/地区的状态) 州选择框

这应该在Javascript / Jquery等的帮助下发生。我遇到了与Cake的核心AJAX帮助器相同的示例,但如果有人可以帮助使用Javascript示例,这将是非常好的。

由于

3 个答案:

答案 0 :(得分:8)

在views / edit.ctp

<script type="text/javascript">
$(document).ready(function (){
 $('#country').change(function() {
   $('#state').load('/controller/getStates/'+$(this).val());
 });
});
</script>
<select id="country" name="country">
<option value="1">Greece</option>
</select>

<span id="state">
<select name="state">
<option value=""></option>
</select>
</span>

并在controller.php中

function getStates(int countryID){
  $this->set('selectbox',
    $this->State->find('list',array('conditions'=>'State.Country_id='.$countryID,
      'fields;=>array('description')));
}

和views / getStates.ctp

<select name="state">
<option value=""></option>

<?php 
foreach($selectbox as $option) 
  echo '<option value="'.$option['id'].'">'.$option['description'].'</option>'."\n";
?>
</select>

我希望我不会忘记一些事情

答案 1 :(得分:2)

@ gong的解决方案效果很好。请记住添加:

$this->layout = 'ajax';

在控制器中并确保layouts文件夹中有一个干净的ajax.ctp ...否则所有的布局代码都将在ajax响应中返回,而且只是下拉代码!

答案 2 :(得分:-2)

    $states = $this->State->find('list', array(
            'conditions' => array('State.country_id' =>$codePassed),
            'order'=>array('State.stateName ASC'),
            'fields' =>array('id','stateName'),
            'recursive' => -1
            ));
    $a='';
    $a.= "<select name=\"state\">";
    $a.= "<option value=\"\">Select state</option>";
    foreach($states as $key=>$value){
        $a.="<option value=\"$key\">".$value."</option>";
    }
    $a.="</select>";