assx64
@assx64

Как в Yii2 сделать связанный список с выводом строки из бд?

<div class="row">
    <div class="col-md-4 vcenter">
        <?= $form->field($model, 'type_task_filter')->dropDownList(['city1'=>'city1','city2'=>city2'], ['prompt'=>'']); ?>
    </div>
</div>
<div class="row">
    <div class="col-md-4 vcenter">
        <?= $form->field($model, 'type_task_filter')-> ?  ?>
    </div>
</div>


Собственно в чем вопрос: При выборе выпадающего списка открывается подвязанный к нему и выводит значение из ячейки бд. К примеру, выбираем 'city1' и открывается(появляется) новое поле с данными из ячейки бд. Никак не пойму, методами Yii2 это реализуемо ? Подскажите решение, буду очень благодарен.

На нативе php + ajax это выглядело бы так: один файл, *.php: создаем форму, создаем таблицу задаем
<select id="cityvm" onChange="change_city()">
        <option></option>
<?php
  $res=mysqli_query($link,"select * from cities");
  while($row=mysqli_fetch_array($res)) 
{
?>
  <option value="<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></option>
<?php
}
?>
     </select>
Затем столбец для вывода строки из бд, которому задаем <div id="street">
Пишем js:
function change_city()
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "ajax.php?city="+document.getElementById("cityvm").value, false);
    xmlhttp.send(null);
    document.getElementById("street").innerHTML=xmlhttp.responseText;

}

И в другом файле ajax.php:
if($city !=""){
    $res = mysqli_query($link, "SELECT * FROM streets WHERE city_id = $city");
    while ($row = mysqli_fetch_array($res))
    {
        echo "<option value='$row[id]' selected>";
        echo $row["name"];
    }
}

И выглядело бы так:
ee6e9cd9da0d47988c235d0a93e2db06.jpg
  • Вопрос задан
  • 394 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Ловим в js смену в select, отправляем ajax на сервер, там делаем выборку, возвращаем json (или готовый view), вставляем в DOM.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы