2013-04-17 25 views
8

Mam dropdownlist w moim modelu _form i chcę dodać pustą wartość (który chcę jako domyślny). Mam następujący: W _form:Yii Lista rozwijana pusta wartość jako domyślna

<?php echo $form->labelEx($model,'country_id'); ?> 
<?php echo $form->dropDownList($model,'country_id',Country::items(),array('empty' => '--Select a country--')); ?> 
<?php echo $form->error($model,'country_id'); ?> 

W Model Kraj:

public static function items() 
{ 
    return CHtml::listData(Country::model()->findAllBySql(
         'SELECT * from country'), 
         'id', 'name'); 
} 

Nawet mój pusty opcja znajduje się w pierwszym rzędzie w dropdownlist, 1. kraj na liście pokazuje domyślnie.

Próbowałem:

<?php echo $form->dropDownList($model,'country_id', 
    Country::items(),array('empty'=>'--Select a country--', 
          'options'=> 
          array(
           '3'=>array('selected'=>'selected') 
           ) 
    )); 
?> 

W ten sposób mogę wybrać opcję domyślną, ale nie mogę ustawić go do pustej wartości, tylko kraje, które weszły od modelu elementy.

Każdy pomysł?

Odpowiedz

19

Czy jesteś pewien, że właściwość Twojego modelu nie jest ustawiona na nic podczas drukowania listy rozwijanej? Poniższe działa na mnie jeśli $model instancja jest tworzony przy użyciu new Country() operatora, ale nie przez wypełnianie właściwości z bazy danych:

<?php echo $form->dropDownList(
    $model, 
    'country_id', 
    Country::items(), 
    array(
     'empty'=>'--Select a country--') 
    ); 
?> 
+0

country_id nie jest ustawienie czegokolwiek. Ten model $ to inny model, który ma parametr country_id jako FK. 'country' => array (self :: BELONGS_TO, 'Country', 'country_id'), aw modelu kraju: 'team' => array (self :: HAS_MANY, 'Team', 'country_id') ... I mają ten sam kod w innych aplikacjach i działa ... tylko w tym przypadku, ten sam kod ... nie działa ... – coppettim

+1

Przepraszam, mój błąd BIG, ustawiłem w bazie danych, że parametr country_id w tbl_team ma wartość domyślną = 1. .. – coppettim

1

Zawsze można coś zrobić jak array_merge w swojej metodzie items

public static function items() 
{ 
return array_merge(array(''=>'--Select a country--'), CHtml::listData(Country::model()->findAllBySql(
          'SELECT * from country'), 
          'id', 'name')); 
} 
1

wierzę szukacie:

echo $form->dropDownList($model,'country_id',Country::items(),array('prompt'=>'')); 
0

jeśli używasz yiibooster może to pomoże

<?php echo $form->dropDownListGroup(
      $model, 
      'kode_cuti_sub2', 
      array(
       'empty'=>'--Select a country--', 
       'widgetOptions' => array(
        'data' => array('Something ...', 'Pilih Jenis Cuti'=>Chtml::listData(Cuti::model()->cuti_sub2(),'kode','jenis_cuti')), 
        'options' => array(
         'placeholder' => 'Pilih NIP Pegawai', 
         'width' => '100%', 
        ), 
       ), 
       'wrapperHtmlOptions' => array(
        'class' => 'col-sm-5', 
       ), 
      ) 
     ); ?> 

w moim przypadku to zadziałało

Powiązane problemy