如何在yii2中创建依赖下拉列表

时间:2016-07-29 05:50:36

标签: jquery yii2

我在backend/views/_form.php

上使用此代码
 <?php $CoursesCat = ArrayHelper::map(CoursesCat::find()->all(),'id', 'cat_name');
$CoursesSubcat = ArrayHelper::map(CoursesSubcat::find()->all(),'id', 'name');
 $form = ActiveForm::begin(); ?>

<?php
echo $form->field($model, 'cat_id')->dropDownList($CoursesCat, 
         ['prompt'=>'-Choose a Category-',
          'onchange'=>'
            $.post( "'.urldecode(Yii::$app->urlManager->createUrl('coursedetail/lists&id=')).'"+$(this).val(), function( data ) {
              $( "select#subcat_id" ).html( data );
            });
        ']); 


echo $form->field($model, 'subcat_id')
    ->dropDownList(  $CoursesSubcat          
        ['prompt'=>'-Choose a Sub Category-'],
        ['id'=>'subcat_id']
    ); ?>

2 个答案:

答案 0 :(得分:1)

public function actionLists($id)
{
   echo $sql = "select * from courses_subcat  where cat_id='$id' ";
    $models = CoursesSubcat::findBySql($sql)->asArray()->all();   
    //echo "<pre>";print_r($model);exit;

    if(sizeof($models) >0){
        echo "<option>-Choose a Sub Category-</option>";
        foreach($models as $model){
            echo "<option value='".$model['id']."'>".$model['name']."</option>";
        }
    }
    else{
        echo "<option>-Choose a Sub Category-</option><option></option>";
    }

}

答案 1 :(得分:0)

使用krajee扩展名进行依赖下拉

详情请参阅yii2 http://demos.krajee.com/widget-details/depdrop

的Krejee依赖下拉列表

或按照以下说明操作:

通过composer安装扩展程序:

 $ php composer.phar require kartik-v/dependent-dropdown "dev-master"

在您看来:

  use kartik\widgets\DepDrop;

//正常父选择

echo $form->field($model, 'cat')->dropDownList($catList, ['id' => 'cat-id']);

//依赖下拉

echo $form->field($model, 'subcat')->widget(DepDrop::classname(), [
    'options' => ['id' => 'subcat-id'],
    'pluginOptions' => [
        'depends' => ['cat-id'],
        'placeholder' => 'Select...',
        'url' => Url::to(['/site/subcat'])
    ]
]);

//控制器

public function actionSubcat() {
$out = [];
if (isset($_POST['depdrop_parents'])) {
$parents = $_POST['depdrop_parents'];
if ($parents != null) {
$cat_id = $parents[0];
$out = self::getSubCatList($cat_id);
// the getSubCatList function will query the database based on the
// cat_id and return an array like below:
// [
// ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
// ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
// ]
echo Json::encode(['output'=>$out, 'selected'=>'']);
return;
}
}
echo Json::encode(['output'=>'', 'selected'=>'']);
}