我尝试用Yii创建下拉列表,使用listData和activeDropDownList。
我使用了网上的例子,但它拒绝为我创建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);
我得到的只是一个没有optgroup的平面下拉列表。只是子数组中的条目。。。
Yii1.1.6(我读了一些关于安全属性的内容,并尝试实现它,但没有成功…
下面的旧答案不正确。很抱歉您可以使用下拉数据数组中的"group"属性创建optgroup。
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,它应该有所不同,因为您添加了$model变量而不是"Cars",并调整了函数
其中一个解决方案是匿名函数。
$data = CHtml::listData(
MyModel::model()->getEntries(0),
'id',
'text',
function(MyModel $aMyModelInstance){
return $aMyModelInstance->getLocalizedGroupNameForThisInstance();
});