Как в DropDownList выставить selected

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
bernardo
Сообщения: 9
Зарегистрирован: 2010.07.11, 15:01

Как в DropDownList выставить selected

Сообщение bernardo »

Замучился с selected для optoins почитал доку, предлагается создать массив $htmlOptions, но так и не понял как его сформировать

Код: Выделить всё

$type=array(1=>'тип1',2=>'тип2'); 
<?=$form->DropDownList($model,'type',$type); ?>
Подскажите как установить тип2 по умолчанию.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Как в DropDownList выставить selected

Сообщение slavcodev »

selected будет значение $model->type
для того чтоб тип2 был по умолчанию, добавьте в rules для модели

Код: Выделить всё

public function rules()
{
   return array(
      array('type', 'default', 'value'=>'тип2'),
   );
} 
Жду Yii 3!
vagus
Сообщения: 11
Зарегистрирован: 2009.12.20, 22:46

Re: Как в DropDownList выставить selected

Сообщение vagus »

Для множественного выбора делаю так:

Код: Выделить всё

echo CHtml::form('','POST',array ('enctype' =>'multipart/form-data'));
echo CHtml::errorSummary($model);
echo CHtml::activeLabel($model, 'values');

$country = array('RUS' => 'Россия',
                      'UKR' =>'Украина', 
                      'BLR' => 'Белоруссия', 
                      'ITL' => 'Италия');
$selectedValues = array('BLR'=> Array ( 'selected' => 'selected' ),
                    'ITL' => Array ( 'selected' => 'selected' )); 

echo CHtml::activeDropDownList($model,'values',
                          $country,
                          array('multiple'=>'multiple',
                                            'name'=>'values',
                                            'class'=>'multiselect',
                                            'title'=>"страны",
                                            'options' => $selectedValues,
                                          ));
echo CHtml::endForm($model);
 
tktl
Сообщения: 8
Зарегистрирован: 2010.09.14, 14:56

Re: Как в DropDownList выставить selected

Сообщение tktl »

mc-bear писал(а):selected будет значение $model->type
для того чтоб тип2 был по умолчанию, добавьте в rules для модели

Код: Выделить всё

public function rules()
{
   return array(
      array('type', 'default', 'value'=>'тип2'),
   );
} 
да, это добавит правило для модели. если в выпадающем списке выбор не будет сделан, то в модель будет записано значение по умолчанию. на представление это не влияет.
добавить в разметку selected опцию

Код: Выделить всё

$type=array(1=>'тип1',2=>'тип2'); 
$model->type = 2;
<?=$form->DropDownList($model,'type',$type); ?>
и в выпадающем списке, выбранным по-умолчанию будет 'тип2'
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Как в DropDownList выставить selected

Сообщение porcelanosa »

А если вот такая ситуация:
Есть элемент формы

Код: Выделить всё

    <? $model->provider_id[] = $provider_id;?>
    <?php echo $form->dropDownList($model, 'provider_id[]', $ddl, array('empty' => 'Выберите поставщика')); ?>
Он выводится в цикле - т.е. в форме несколько выпадающих списков.
Передается параметр provider_id[] - т.е. массив ID поставщиков (их может быть несколько)
И тут возникает проблема:
если просто указывать 'provider_id' - как будто бы он один в форме - то элемент selected заполняется автоматом.
Но тут надо указать его с квадратными скобками.
Как быть?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Как в DropDownList выставить selected

Сообщение porcelanosa »

Код: Выделить всё

$selectedValues = array($provider_id => Array('selected' => 'selected'));
            echo CHtml::activeDropDownList($model, 'provider_id[]', $ddl, array(
                'empty' => 'Выберите поставщика',
                'options' => $selectedValues,)
            ); 
вот так работает
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как в DropDownList выставить selected

Сообщение Johnatan »

porcelanosa писал(а):

Код: Выделить всё

$selectedValues = array($provider_id => Array('selected' => 'selected'));
            echo CHtml::activeDropDownList($model, 'provider_id[]', $ddl, array(
                'empty' => 'Выберите поставщика',
                'options' => $selectedValues,)
            ); 
вот так работает
Мне немного сложно представить для чего именно нужна такая конструкция.. Возможно ли привести более обширную часть кода или объяснить как это работает и для чего? Просто я подозреваю, что здесь не совсем правильный подход.
Конференция: yii@conference.jabber.ru
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Как в DropDownList выставить selected

Сообщение porcelanosa »

Johnatan писал(а): Мне немного сложно представить для чего именно нужна такая конструкция.. Возможно ли привести более обширную часть кода или объяснить как это работает и для чего? Просто я подозреваю, что здесь не совсем правильный подход.
Есть связанные many_many таблицы поставщика и коллекции.
В форме редактирования коллекции появляется соответсвующее количество выпадающих списков для изменения поставщика. На самом деле, конечно, бизнес-логика тут страдает. Поставщика можно удалить или добавить, но вряд ли изменить.
Ну на данном этапе вроде бы так проще даже - хотя задумываюсь над переделкой.
при сохранении формы посылается массив id провайдеров, которые и сохраняются в связующую таблицу.
Мне кажется, что подобных ситуаций можно вообразить достаточно много.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как в DropDownList выставить selected

Сообщение Johnatan »

Не удобнее ли будет использовать

Код: Выделить всё

echo CHtml::activeListBox($model, 'provider_id', $ddl, array(
                'empty' => 'Выберите поставщика',
                'htmlOptions' => array('multiple'=>'multiple'))
            ); 
?

Даже для пользователей будет удобнее, разве нет?

Кстати, если я не ошибаюсь, то вместо provider_id можно передавать название связи содержащей набор моделей (здесь и далее использую "набор моделей" вместо "коллекции моделей" дабы не вводить в заблуждение с моделью Collections по-русски "коллекции") с выбранными значениями, а в htmlOptions => array('key'=>'provider_id') уже передавать настоящий атрибут этих моделей из которых нужно брать выбранные значения.
Получится что-то вроде такого...
Листинг модели Collections:

Код: Выделить всё

public function relations()
{
    //........
    return array(
        'providers'=>array(self::MANY_MANY, 'Providers', 'providers_collection(collection_id, provider_id)'),
    );
    //........
} 
Таким образом запросив $model->providers получим набор моделей Providers связанных с выбранной коллекцией. Имея первичный ключ этих моделей "id" можно сделать список с мультивыборкой таким образом:

Код: Выделить всё

echo CHtml::activeListBox($model, 'providers', $ddl, array(
                'empty' => 'Выберите поставщика',
                'htmlOptions' => array('multiple'=>'multiple', 'key'=>'id'))
            ); 
Итого получим один список размером в 4 строки с мультивыборкой.

Честно - код на работоспособность не проверял (3 часа ночи). Если нужно - завтра проверю и исправлю, но идея такая вот.
Конференция: yii@conference.jabber.ru
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Как в DropDownList выставить selected

Сообщение porcelanosa »

Johnatan писал(а):Честно - код на работоспособность не проверял (3 часа ночи). Если нужно - завтра проверю и исправлю, но идея такая вот.

Код: Выделить всё

Fatal error: Call to a member function hasErrors() on a non-object in W:\home\site\framework\web\helpers\CHtml.php on line 1384
Вот такая ошибочка вылезает.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как в DropDownList выставить selected

Сообщение Johnatan »

Бес попутал.. :(
Строку

Код: Выделить всё

'htmlOptions' => array('multiple'=>'multiple', 'key'=>'id')) 
замените на

Код: Выделить всё

'multiple'=>'multiple', 'key'=>'id') 
И это... В случае с множественной выборкой фраза "Выберите поставщика" в первой строчке смотрится не очень. Её либо убрать совсем, либо вынести в label.
Конференция: yii@conference.jabber.ru
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Как в DropDownList выставить selected

Сообщение porcelanosa »

Ах, Джонатан, спасибо! Правда в конце концов решила по другому сделать, но на будущее Ваш совет очень пригодится!
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
rem
Сообщения: 56
Зарегистрирован: 2011.11.22, 16:08

Re: Как в DropDownList выставить selected

Сообщение rem »

Помогите пожалуйста решить такую проблему:
Сделал чтобы при редактировании в выпадающем список отмечались нужные строки. Но теперь у каждой записи вдобавок отмечается еще и первая строчка, хотя она не была отмечена при добавлении. Например при добавлении я отмечаю 3 и 4 строчки в списке, но при редактировании у меня становятся отмеченными 1, 3 и 4 строчки. Не могу понять как это исправить.

Код: Выделить всё

<?php 
    echo $form->dropDownList($model,'category_id', CHtml::listData(Category::model()->findAll(), 'id', 'category_name'), array('class'=>'text s4', 'multiple' => 'multiple', 'options'=>$model->selected()));
?>
$model->selected() возвращает это:

Код: Выделить всё

array(2) {
  [3]=>
  array(1) {
    ["selected"]=>
    string(8) "selected"
  }
  [4]=>
  array(1) {
    ["selected"]=>
    string(8) "selected"
  }
}
 
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: Как в DropDownList выставить selected

Сообщение desc »

Подскажите как сохранить нужные данные
dropDownList($model,'translatedLanguages', array('ru'=>'Russian','en'=>'English')
в массиве $_POST['SettingsSettings']
0 => 'ru'
1 => 'en'
а мне надо именно
'ru'=>'Russian','en'=>'English'
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Как в DropDownList выставить selected

Сообщение esche »

desc писал(а):Подскажите как сохранить нужные данные
...
а мне надо именно
'ru'=>'Russian','en'=>'English'
В отдельном классе, или в модели, в static переменной, или в функции getLanguageValues(), или в параметрах приложения (params), или в БД (отдельной таблицей, или в таблице для сохранения конфигурации). Вариантов куча, всё зависит от назначения этих переменных.

А из формы принимать всё те же ключи "ru", "en"...
...
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: Как в DropDownList выставить selected

Сообщение desc »

может я не правильно выразился, мне надо принять из пост массива 'ru'=>'Russian','en'=>'English'
а он шлет 0 => 'ru' 1 => 'en' хотя в форме где dropDownList стоит array('ru'=>'Russian','en'=>'English')
Странник
Сообщения: 295
Зарегистрирован: 2013.04.08, 10:35
Откуда: Нижний Новгород

Re: Как в DropDownList выставить selected

Сообщение Странник »

desc писал(а):может я не правильно выразился, мне надо принять из пост массива 'ru'=>'Russian','en'=>'English'
а он шлет 0 => 'ru' 1 => 'en' хотя в форме где dropDownList стоит array('ru'=>'Russian','en'=>'English')
Чтобы подсказать нужно показать ВЕСЬ участок кода представления, где вызывается dropDownList.
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: Как в DropDownList выставить selected

Сообщение desc »

Код: Выделить всё

<div class="form-group">
        <?php echo $form->labelEx($model,'translatedLanguages'); ?>
         <?php echo $form->dropDownList($model,'translatedLanguages', array('ru'=>'Russian','en'=>'English'), array('multiple'=>'multiple')); ?> 
        <?php echo $form->error($model,'translatedLanguages'); ?>
    </div>
в селекте можно выбрать сразу 2 языка и отправить

прилетает
0 => 'ru'
1 => 'en'
mader
Сообщения: 84
Зарегистрирован: 2015.06.15, 13:44
Откуда: Воронеж

Re: Как в DropDownList выставить selected

Сообщение mader »

Подскажите плз, голову сломал.

Код: Выделить всё

$items = [
                '0' => 'Категория товара',
                '1' => 'Игрушки',
                '2' => 'Одежда'];
$params = [
                'options' => ['1'=>['selected'=>'selected']]
            ];
 echo $form->field($buy, 'Btype_name',)->dropDownList(
                    $items,$params
                )->label(false); 
Нужно чтобы при загрузке был выбран заданный option.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как в DropDownList выставить selected

Сообщение ElisDN »

Код: Выделить всё

$buy = new Buy();
$buy->Btype_name = 1; 
Ответить