2014-11-07 15 views
0

Я пытаюсь создать раскрывающийся список с Yii, используя listData и activeDropDownList.Yii активный раскрывающийся список с optgroup

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

$data = CHtml::listData(MyModel::model()->getEntries(0), 'id', 'text', 'group'); 

Создает массив, как ожидалось:

Array([group1] => Array([10]=>FirstEntry, [20]=>SecondEntry), 
[group2]=>Array([30]=>firstEntryGroup2, [40]=>firstEntryGroup2)) 

И так далее. Таким образом, это ассоциативный массив заполнен подмассивов ...

Но когда я использую

echo CHtml::activeDropDownList($model, 'dropdownName', $data); 

Все, что я получаю плоский выпадающий без optgroups. Всего записей из подмассивов ...

Yii 1.1.6 (я прочитал кое-что о безопасных-атрибутов и пытались реализовать, но без успеха ...

+0

Является ли 'data data 'заменяется/перезаписывается где-либо перед использованием в dropDownList? – topher

+0

нет, определенно нет ... Я получаю нужный контент, это просто группа, которая отсутствует (a.k.a. ключи основного массива) – Swissdude

+0

Это действительно странное поведение. Какую версию Yii вы используете? Вы также можете посмотреть исходный код для [CHtml :: listOptions()] (http://www.yiiframework.com/doc/api/1.1/CHtml#listOptions-detail) для дальнейшей отладки. – topher

ответ

1

старый ответ ниже неверен .. к сожалению, вы создать optgroups используя атрибут 'группы' в вашем ниспадающего массиве данных

array( array('id'=>256,'text'=>'TV','group'=>'Electrical'), array('id'=>257,'text'=>'Radio','group'=>'Electrical'), );

http://www.yiiframework.com/forum/index.php/topic/6903-how-can-i-generate-a-select-list-with-optgroup/

Старый ответ:.

Существует большая суть здесь показывает, как создать то, что вы после: https://gist.github.com/StandardNerd/2909111

<?php echo CHtml::dropDownList('Cars', 'car_id', array( 'Mazda'=>array( 'mazda-rx7'=>'RX7', 'mazda-rx5'=>'RX5', ), 'Volvo'=>array( 'volvo-b9tl'=>'B9TL', 'volvo-l90e-radlader'=>'L90E Radlader', ), )); ?>

Вы сейчас используете activeDropDownList, который должен быть только разные, потому что вы добавить переменную $ модель вместо «Автомобили» и настроить функцию

+0

Спасибо, что отлично работали ... – Swissdude

-1

Одним из решений является анонимная функция.

$data = CHtml::listData(
    MyModel::model()->getEntries(0), 
    'id', 
    'text', 
    function(MyModel $aMyModelInstance){ 
     return $aMyModelInstance->getLocalizedGroupNameForThisInstance(); 
}); 
Смежные вопросы