cascade Dropdown در Yii2

گاهی وقتها ما نیاز داریم که به وسیله ی انتخاب یک گزینه از دراپ دان زیر مجموعه های گزینه ی انتخابی را نمایش دهیم.
برای مثال شما با انتخاب استان مورد نظر خود در یک فورم ثبت نام نیاز دارید
که به صورت اتوماتیک لیست شهرستان های آن استان را به شما نمایش دهد .
در اصلاح به این روش 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 "";
}
}

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *