2013-05-08 5 views
1

Я хочу получить список productTypes из базы данных и вывести их в раскрывающийся список, который затем будет использоваться для создания ajax второго раскрывающегося списка.Yii - заполнение выпадающего списка

Шаг 1: Контроллер получает productTypes из базы данных Шага 2: Контроллер преобразует productTypes объекта в списке Шага 3a: список вывода для тестирования в виде Шага 3b: Заполняет выпадающий список с просмотром списка

Snippet контроллера

public function init() 
{ 

    $this->dynamicTypes(); 
    $this->render('calculator', array('types' => $this->_types)); 
} 


public function dynamicTypes() 
{ 
    $this->_types = CHtml::listData(ProductType::model()->findAll(), 'id', 'type'); 
} 

Просмотр файла Snippet

<?php 
    // Step 3a (this works fine) 
    echo '<pre>'; 
     print_r($types); 
    echo '</pre>'; 

    // Step 3b - Returns an error 
    echo $form->dropDownList('productTypes',1, array($types)); 
?> 

<?php $this->endWidget(); ?> 

</div> 

С шагом 3b, я попытался следующие:

echo $form->dropDownList('productTypes',1, array($types)); 
Error Msg: get_class() expects parameter 1 to be object, string given 

Согласно http://www.yiiframework.com/doc/api/1.1/CHtml#dropDownList-detail, метод DROPDOWNLIST принимает следующие аргументы:

public static string dropDownList(string $name, string $select, array $data, array $htmlOptions=array ()) 

, где первый аргумент является строка с указанием имени поля ввода.

Что я сделал не так, и как я могу это исправить?

UPDATE

echo CHtml::dropDownList('productTypes',1, array($types)); 

, кажется, работает, но когда я смотрю на раскрывающемся меню в представлении, по какой-то причине, то в DropDownList а 0. По какой-то причине, это ставит параметры в OptionGroup

<select name="productTypes" id="productTypes"> 
<optgroup label="0"> 
<option value="1">Scrap</option> 
<option value="2">Coin</option> 
<option value="3">Bar</option> 
</optgroup> 
</select> 

РЕШИТЬ: Удалены array($types), заменены только $types

echo CHtml::dropDownList('productTypes',1, $types); 
+0

Вы получаете сгруппированный выпадающий список, потому что вы используете 'массив ($ типов)' вместо просто '$ types'. –

ответ

1

Похоже, что $form является объектом CActiveForm класса. Эта версия метода dropDownList принимает экземпляр класса CModel.

Смотреть метод ПОДПИСЬ CActiveForm::dropDownList

Использование

echo CHtml::dropDownList('productTypes',1, array($types)); 

вместо

echo $form->dropDownList('productTypes',1, array($types)); 
Смежные вопросы