گاهی وقتها ما نیاز داریم که به وسیله ی انتخاب یک گزینه از دراپ دان زیر مجموعه های گزینه ی انتخابی را نمایش دهیم.
برای مثال شما با انتخاب استان مورد نظر خود در یک فورم ثبت نام نیاز دارید
که به صورت اتوماتیک لیست شهرستان های آن استان را به شما نمایش دهد .
در اصلاح به این روش casecade dropdownlist می گویند (نمیدونم درست توضیح دادم یا نه :D)
خوب در مثال زیر ما دراپ دان اولی را با دیتا پر کردیم
و با انتخاب گزینه توسط کاربر , به کنترلر ajax میزنیم و دراپ دان دوم را به وسیله ی آن پر میکنیم.
در مثال زیر من ابتدا دسته بندی های مادر را نمایش می دهم
سپس با انتخاب دسته بندی , زیر مجموعه های آن را نمایش می دهم:
در view
<?php $dataCategory = ArrayHelper::map( \app\models\ProjectCategory::find() ->where("parent_id is null") ->asArray() ->all(), "id", "title"); echo $form->field($model, "select_cat[0]") ->dropDownList($dataCategory, [ "onchange" => ' $.post( " . Yii::$app->urlManager->createUrl("project-item/lists?id=") . ""+$(this).val(), function( data ) { if(data){ $( "#div1 select" ).html( data ); } }); ']); ?> <div id="div1" > <?php echo $form->field($model, "select_cat[1]") ->dropDownList( array(), ["prompt" => "-Choose a Category-"] ); ?> </div>
و در controller
public function actionLists($id) { $countPosts = \app\models\ProjectCategory::find() ->where(['parent_id' => $id]) ->count(); $posts =\app\models\ProjectCategory::find() ->where(['parent_id' => $id]) ->orderBy('id DESC') ->all(); if ($countPosts > 0) { foreach ($posts as $post) { echo "" . $post->title . ""; } } else { echo ""; } }