yii dropdownlist许多选项的值相同

时间:2013-06-08 13:59:04

标签: php forms drop-down-menu yii

我试图在yii下拉列表中为几个选项提供相同的值,但是我被卡住了。 得到这样的东西:

echo $form->dropDownList($model,'XXXXX', array(1=>array('XX','YY', 'XY', 'YX', 'XXX', 'YYY'),
                                               2=>array('AA','BB', 'AB', 'BA),
                                               3=>array('CD','DC', 'CC', 'DD', 'DCD', 'CDC')));

但它不起作用(在第一个数组中给出值0,1,2,3,4,5:/)。我想要x和y的每个选项得到值= 1,A和B组合应该得到2,C& D得到值3.我怎么能做到? 希望有人能理解我;)

2 个答案:

答案 0 :(得分:0)

对于正常的下拉列表,您必须为所有阵列的各个元素分配一个键。此键将用作选项的值。分配给数组元素的键(如代码中)将用作optgroup的文本/标签。

然而,这种方法不适用于您的情况,因为数组中的每个键只能有一个元素。一种方法是将每个元素包装在自己的optgroup中,并在加载后使用javascript清除optgroups的标签。

$form->dropDownList($model,'XXXXX', array(
    array(1=>'XX'),array(1=>'YY'),array( 1=>'XY'),....
    array(2=>'AA'),array(2=>'AB'),array( 2=>'BA'),....
    ....
    ),array('onfocus'=>'$("optgroup",$(this)).attr("label","")')
);

您可以解决此问题的另一种方法是根据选择的选项更改属性的值。

public function beforeValidate(){
    if(strpos($this->XXXX,'X')!==false){
        $this->XXXX=1;
    }else ......
}

答案 1 :(得分:0)

如果您使用数字值,还有另一种方法可以执行此操作...

因为(int)1 ===(int)01 ===(int)001,您可以为每个选项添加额外的前导零。所以对你来说......

echo $form->dropDownList($model,'XXXXX', array(
    '1' => 'XX',
    '01' => 'YY',
    '001' => 'XY',
    '0001' => 'YX',
    '00001' => 'XXX',
    '000001' => 'YYY',

    '2' => 'AA',
    '02' => 'BB',
    '002' => 'AB',
    '0002' => 'BA',

    '3' => 'CD',
    '03' => 'DC',
    '003' => 'CC',
    '0003' => 'DD',
    '00003' => 'DCD',
    '000003' => 'CDC'
));

根据您对价值的处理,您可能需要将其强制转换为整数,但如果您的Yii规则正确,那么无论如何都会这样做。

请记住,如果您从数据中重新填充此下拉列表,那么它将始终选择唯一真正与相关属性值匹配的值(3 = CD而非DC CC等)