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

通常のドロップダウン リストでは、すべての配列の個々の要素にキーを割り当てる必要があります。このキーは、オプションの値として使用されます。コードのように、配列要素に割り当てられたキーは、optgroup のテキスト/ラベルとして使用されます。

ただし、配列内のキーごとに1つの要素しか存在できないため、このアプローチはあなたの場合には機能しません。1 つの方法は、各要素を独自の optgroup 内にラップし、ロード後に javascript を使用して optgroup のラベルをクリアすることです。

$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 に答える
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 = DC CC ではなく CD など)。

于 2013-08-29T13:32:43.870 に答える