2

我的控制器中有以下代码:

 public function getData($property)
    {
        $data = array(
             'type'=>array(
               'PC',
           'Laptop'
            ),
            'brand'=>array(
               '1'=>array( 
                   'ASUS PC',
                   'DELL PC',
            ),
            '2'=>array( 
                   'ASUS laptop',
                   'DELL laptop',
            ),

        );
        return $data[$property];
    }

在我看来:

 <?=  $form->dropDownList($model, 'type',$model->getData('type'), array('class' => 'form-control')) ?>

此代码(在视图中)返回类型。(例如,在下拉列表中显示 pc 和笔记本电脑选项)。

如果用户从第一个下拉菜单(类型)中选择 pc 选项,我需要开发将在下拉菜单中显示“ASUS PC”和“DELL PC”的相关下拉菜单。我该怎么做。

4

1 回答 1

0

1)在视图页面中添加两个下拉字段。

<?php echo  $form->dropDownList($model, 'type',array('PC'=>'PC','Laptop'=>'Laptops'),
array(
  'empty'=>'--Select Product Type---' ,  
  'ajax' => array(
  'type'=>'POST', //request type
  'url'=>CController::createUrl('yourcontroller/getData'), //url to call.
  'data'=>array('type'=>'js:this.value'),// value to send
  'update'=>'#dependent_value', //selector to update

))); ?>

//empty since it will be filled by the other dropdown
<div class="row">
        <?php echo CHtml::dropDownList('dependent_value','', array()); ?>


    </div>

控制器

public function actionGetData() {
        $data = array('type' => array('PC', 'Laptop'), 'brand' => array('1' => array('ASUS PC', 'DELL PC'), '2' => array('ASUS laptop', 'DELL laptop')));
        //echo "<pre>";print_r($_POST['type']);die;
        if ($_POST['type'] == 'PC') {

            $arr = $data['brand'][1];
        } elseif ($_POST['type'] == 'Laptop') {

            $arr = $data['brand'][2];
        } else {
            $arr = array();
        }
        echo CHtml::tag('option', array('value' => $value), CHtml::encode("Select Product Brand--"), true);
        foreach ($arr as $value => $name) {
            echo CHtml::tag('option', array('value' => $value), CHtml::encode($name), true);
        }
    }

注意:确保在 accessRules 中设置访问此操作的权限

于 2016-12-27T07:46:03.057 回答