我试图在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.我怎么能做到? 希望有人能理解我;)
答案 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等)