Чтобы сделать так, чтобы выбор в первом выпадающем списке (DropdownList) влиял на содержимое второго, вам нужно использовать JavaScript для обработки события изменения первого списка и обновления второго списка на основе выбранного значения. Вот как это можно реализовать:
- Создайте два DropdownList: Один для
id_activitestudy
, а другой дляid_activework
. Второй список будет обновляться в зависимости от выбора в первом. - Добавьте JavaScript для обработки изменения: Используйте AJAX для получения данных для второго списка на основе выбранного значения первого списка.
Вот пример кода:
php
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use yii\web\View;
// Начало формы
$form = ActiveForm::begin();
// Первый DropdownList
echo Html::dropDownList('id_activitestudy', null,
ArrayHelper::map(Activitestudy::find()->all(), 'id_activitestudy', 'name'),
[
'prompt' => 'Выберите критерий оценки',
'id' => 'id-activitestudy', // Добавляем ID для использования в JavaScript
]
);
// Второй DropdownList
echo $form->field($model, 'id_activework')->dropDownList([], ['prompt' => 'Выберите активную работу', 'id' => 'id-activework']);
// Завершение формы
ActiveForm::end();
?>
<?php
// JavaScript для обновления второго DropdownList
$script = <<< JS
$('#id-activitestudy').change(function() {
var idActivitestudy = $(this).val();
$.ajax({
url: 'index.php?r=activework/get-activeworks', // Укажите правильный URL для вашего контроллера
data: {id: idActivitestudy},
success: function(data) {
$('#id-activework').html(data);
}
});
});
JS;
$this->registerJs($script, View::POS_READY);
?>
Контроллер
Теперь вам нужно создать метод в вашем контроллере, который будет обрабатывать AJAX-запрос и возвращать список активных работ в формате HTML:
php
public function actionGetActiveworks($id)
{
$activeworks = Activework::find()->where(['id_activitestudy' => $id])->all();
$items = ArrayHelper::map($activeworks, 'id_activework', 'name');
foreach ($items as $key => $value) {
echo "<option value='$key'>$value</option>";
}
}
Объяснение
- Первый DropdownList: Содержит список критериев оценки. При выборе элемента происходит событие
change
. - AJAX-запрос: Когда пользователь выбирает элемент в первом списке, отправляется AJAX-запрос на сервер, который возвращает соответствующие активные работы.
- Второй DropdownList: Обновляется с новыми данными, полученными от сервера.
Теперь, когда вы выберете элемент в первом выпадающем списке, второй список будет автоматически обновляться в зависимости от вашего выбора!