0

我试图为 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。我该怎么做?希望有人能理解我;)

4

2 回答 2

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 等)

于 2013-08-29T13:32:43.870 回答
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 ......
}
于 2013-06-08T15:29:16.170 回答