带有optgroup的Yii活动下拉列表

时间:2014-11-07 17:09:26

标签: php yii drop-down-menu

我尝试使用listData和activeDropDownList创建包含Yii的下拉列表。

我使用网络上的示例,但它拒绝为我创建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(我读了一些关于安全属性的内容并尝试实现它,但没有成功......

2 个答案:

答案 0 :(得分:2)

以下旧答案不正确。抱歉。您可以使用'组创建选择组'下拉数据数组中的属性。

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变量而不是&#39; Cars&#39;并调整功能

答案 1 :(得分:-1)

其中一个解决方案是匿名功能。

$data = CHtml::listData(
    MyModel::model()->getEntries(0),
    'id',
    'text',
    function(MyModel $aMyModelInstance){
        return $aMyModelInstance->getLocalizedGroupNameForThisInstance();
 });