Выпадающий список DropDownList в Yii2

24-08-2018
post-image

При создании пользовательских интерфейсов, кроме текстовых полей, часто используются выпадающие списки —DropDown List. Этот элемент позволяет ограничить пользователя выбором одного или нескольких вариантов из предложенного списка.

Виджет yii\widgets\ActiveField уже содержит метод dropDownList( $items,$options = [] ), являющийся оберткой для yii\helpers\BaseHtml::activeDropDownList( $model, $attribute, $items, $options = [] ) отрисовывающего выпадающий список, используя html тег select.

Простой пример

Первый параметр $items должен быть массивом, содержащим данные для построения списка. Ключи массива будут использованы как значения элементов списка, а значения массива будут использованы как заголовки элементов списка.


$form = ActiveForm::begin();
echo $form->field($model, 'city')->dropDownList([
    '0' => 'Москва',
    '1' => 'Волгоград',
    '2' => 'Казань',
    '3' => 'Краснодар',
]);
ActiveForm::end();

Настройки выпадающего списка

Второй параметр $options— необязательный массив настроек списка.

prompt

Текстовая строка, отображаемая первым элементом без значения.

options

Массив атрибутов для элементов списка (тега option). Ключи массива должны совпадать со значениями элементов списка.

encodeSpaces

Булево значение, активирующее кодирование пробелов в значениях элементов списка в  . По-умолчанию имеет значение false.

encode

Булево значение, активирующее кодирование значений элементов списка. По-умолчанию имеет значение true. Кодирование производится посредством метода yii\helpers\BaseHtml::encode().

Все остальные настройки будут использованы как атрибуты тега списка.

DropDownList с опцией prompt


    $form = ActiveForm::begin();
    $items = [
        '0' => 'Активный',
        '1' => 'Отключен',
        '2'=>'Удален'
    ];
    $params = [
        'prompt' => 'Выберите статус...'
    ];
    echo $form->field($model, 'status')->dropDownList($items,$params);
    ActiveForm::end();

Выпадающий список DropDownList в Yii2

Полученный html код


< label class="control-label" for="record-status">Статус записи
< select id="record-status" class="form-control" name="Record[status]">
    < option value="">Выберите статус...
    < option value="0">Активный
    < option value="1">Отключен
    < option value="2">Удален
< /select>

Вывод данных из модели (базы данных)

Для формирования массива данных для списка из базы данных можно воспользоваться хелпером ArrayHelper::map().



    $form = ActiveForm::begin();
...
// получаем всех авторов
    $authors = Author::find()->all();
// формируем массив, с ключем равным полю 'id' и значением равным полю 'name' 
    $items = ArrayHelper::map($authors,'id','name');
    $params = [
        'prompt' => 'Укажите автора записи'
    ];
    echo $form->field($model, 'author')->dropDownList($items,$params);
...
    ActiveForm::end();


Группированный список

Массив данных может быть многоуровневым, таким образом, можно создать группированный список.



    $form = ActiveForm::begin();
    $items = [
        'Активный' => [
            '0' => 'Админ',
            '1' => 'Модератор',
            '2' => 'Пользователь',
        ],
        'Отключен' => [
            '3' => 'За нарушения',
            '4' => 'Самостоятельно',
        ],
        'Удален' => [
            '5' => 'Админом',
            '6' => 'Самостоятельно',
        ],
    ];
    $params = [
        'prompt' => 'Выберите статус...',
    ];
    echo $form->field($model, 'status')->dropDownList($items,$params);
    ActiveForm::end();
Выпадающий список DropDownList в Yii2

Множественный выбор

Для включения возможности выбора нескольких элементов, нужно в параметрах указать 'multiple' => 'true' . Правда, при этом элемент select отображается как listbox.


ТЕГи: yii2

Поделился? Читай дальше =)

Есть что сказать? Давай:

Комментарии:

Нет комментариев =( Так быть не должно!
Напиши что-нибудь хорошее =)

Будь в курсе