Yii2 html dropdownlist selected

Yii Framework

Как и куда писать, чтобы dropDownList показал нужный мне selected?
У меня большие несоответствия модели и таблицы базы данных, поэтому dropDownList не может сам подхватить нужное.

ElisDN Сообщения: 5831 Зарегистрирован: 2012.10.07, 10:24 Контактная информация:

Re: dropDownList и selected вручную

Сообщение ElisDN » 2015.10.05, 21:16

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.05, 21:58

kawabanga Сообщения: 806 Зарегистрирован: 2013.10.12, 23:35 Откуда: Новосибирск

Re: dropDownList и selected вручную

Сообщение kawabanga » 2015.10.05, 22:02

if ($model->isNewRecord) < $model->attribute = 2; > // далее выводите нужный дропдаун лист 
if (!$model->attribute) $model->attribute = 2; 

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.05, 22:12

Запись не новая. Новые сами подставляются.
Проблема с формами, куда загружаются данные из базы данных. Старые.
Там несоответствие формы и таблицы db.
Поэтому и требуется вручную допилить.

Читайте также:  Вставить тег страница html

У меня этот select — это элемент массива полей

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.06, 09:13

В контроллере присвоены значения.
И в обычные текстовые поля значения подставляются.
А вот нужный option в dropDown не хочет быть selected.
Из контроллера приходит массив из 4 моделей, внутри каждой из которых есть атрибут field[]
Та форма, которую только что трогали, нормально отображает свои селекты (возле option стоит selected).
В остальных формах dropdown ничего брать не хочет, чтобы был уже выбран option

Поэтому суть вопроса была: как в самой вьюхе формы выбрать option у dropdown’а:

kawabanga Сообщения: 806 Зарегистрирован: 2013.10.12, 23:35 Откуда: Новосибирск

Re: dropDownList и selected вручную

Сообщение kawabanga » 2015.10.06, 10:13

Вам и говорят, измените выше $model->attribute.
Разве не логично? Сделайте проверку свою на валидность, и если не подходит, подставьте по дефолту.

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.06, 12:37

Вам и говорят, измените выше $model->attribute.
Разве не логично? Сделайте проверку свою на валидность, и если не подходит, подставьте по дефолту.

kawabanga Сообщения: 806 Зарегистрирован: 2013.10.12, 23:35 Откуда: Новосибирск

Re: dropDownList и selected вручную

Сообщение kawabanga » 2015.10.06, 14:54

А там разве есть что то интересное? Показывайте код. Как говорят, мы не телепаты.
Чему равен аттрибут, и что в массиве dropDownList(). Ну и конечно же, причем тут 4 модели.

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.06, 17:30

field($numModel[$tM->id], 'field['.($pM->id).']') ->dropDownList( [0 => 'нет', 1 => 'да'], [ 'id' => 'field-'.($pM->id).'', 'prompt' => '--выберите--', $numModel[$tM->id]->field[$pM->id] => ['selected ' => true], // у буржуев взял - не работает 'value' => $numModel[$tM->id]->field[$pM->id] // аналогично ] )->label($pM->name) ?>

Все числа становятся куда надо. Проверено var_dump’ом
А 4 формы — так как раз из-за этого и не работает.
Думаю, повторять смысла нет.
Просто вчитайтесь.

Пока поставил костыль из jQuery.

Re: dropDownList и selected вручную

Покажите как присваеваете.

Почему не используете рекомендации из доки для табличных форм?
https://github.com/yiisoft/yii2/blob/ma . r-input.md

kawabanga Сообщения: 806 Зарегистрирован: 2013.10.12, 23:35 Откуда: Новосибирск

Re: dropDownList и selected вручную

Сообщение kawabanga » 2015.10.07, 07:08

что-то мне кажется тут ошибка, но данных все равно мало.
field($numModel[$tM->id], ‘field[‘.($pM->id).’]’)

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.07, 09:13

kawabanga писал(а): что-то мне кажется тут ошибка, но данных все равно мало.
field($numModel[$tM->id], ‘field[‘.($pM->id).’]’)

field($model[1], 'field[33]') ->dropDownList( [0 => 'нет', 1 => 'да'], [ 'id' => 'field-33', 'prompt' => '--выберите--', '0.345' => ['selected ' => true], // у буржуев взял - не работает 'value' => '0.345' // аналогично ] )->label('Какой-то label') ?>

Вы же читать не хотите.
$model[1] — это не свойство модели, это отдельная модель.
Есть на странице 4 формы с массивом из 4 моделей.
В моделях и формах сплошная нумерация поля field[]. В первой форме (и модели) от field[1] до field[5], во второй — с field[6] и т.д.
В форме, которая только что редактировалась, options в select (dropDownList) нормально устанавливается.
В остальных 3 формах — нет.
Данные приходят одинаково.

kawabanga Сообщения: 806 Зарегистрирован: 2013.10.12, 23:35 Откуда: Новосибирск

Re: dropDownList и selected вручную

Сообщение kawabanga » 2015.10.07, 09:22

Если бы люди поняли, что вы написали, давно бы написали ответ, а от вас негативом за версту несет.

Увижу ли я у вас в модели, что то подобное?

Прочитайте документацию, как формируется ваш код.

Пытаюсь дальше включить телепата (а вы и дальше пишите, что я не читаю ваш код).
Думаю вам проще попробовать через Html::field собрать, без привязки к конкретной модели — http://www.yiiframework.com/doc-2.0/yii . t()-detail

Re: dropDownList и selected вручную

Сообщение megl » 2015.10.07, 16:47

Через BaseHtml та же самая беда получается.

В форме, которая только что редактировалась, селекты нормально устанавливаются.
В остальных формах на странице видны правильные значения только в input text.
Видимо, придётся оставлять костыль.

Спасибо за этот последний совет с yii\helpers\BaseHtml::activeDropDownList
Всё же вариант.

Источник

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

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() .

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

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

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

 < label for="record-status">Статус записи < select 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: Выпадающий список DropDownList

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

При создании пользовательских интерфейсов, кроме текстовых полей, часто используются выпадающие списки — Drop-Down 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, 'status')->dropDownList([ '0' => 'Активный', '1' => 'Отключен', '2'=>'Удален' ]); ActiveForm::end();

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

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

prompt

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

options

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

encodeSpaces

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

encode

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Оцените статью