1

zendフォーム要素を使用して選択ボックスを作成しています。これで、selectboxに表示される値のリストができました。値は同じでも、キャプションが異なる場合があります。Zendフォームは、同じ値の2つのオプションを表示しません。私のコードは次のとおりです。

$this->addMultiOption('','-- Select ****** --');
foreach($options as $option) {
    $this->addMultiOption($option->value,$option->caption);
}

ここで、オプションの値は1,2,3,4,1,2,6,7,8,2,3,2,1のように同じにすることができます...そしてオプションのキャプションはaaa、bbb、ccc、のように異なりますddd、eee、fff

aaaは値1を持つことができ、bbbも値1を持つことができます。この場合、bbbのみが表示されます。

これを機能させる方法はありますか?

前もって感謝します。

4

3 に答える 3

2

addMultiOptionの実装はここで確認できます。オプションを文字列としてキャストし、その値を強制して、以前の値を上書きすることに気付くでしょう。

/**
 * Add an option
 *
 * @param  string $option
 * @param  string $value
 * @return Zend_Form_Element_Multi
 */
public function addMultiOption($option, $value = '')
{
    $option  = (string) $option;
    $this->_getMultiOptions();
    if (!$this->_translateOption($option, $value)) {
        $this->options[$option] = $value;
    }

    return $this;
}

考えられる解決策は、分析時に切り取ったランダムな文字列である接尾辞をオプションに追加することです。個別のオプションを作成し、マッピング配列を使用してそれらをマッピングすることもできます。

<select>
    <option value="car">Car</option>
    <option value="toy">Toy</option>
<select>

配列付き

$mapping = array(
    'car' => 'car',
    'toy' => 'car'
);

$trueValue = $mapping[$formOption];
于 2012-06-05T14:21:54.730 に答える
0

これは、値を変更するための私のコードです。後で、ZENDコントローラーまたは他の場所で文字列の最初の部分のみを評価します。それが役に立てば幸い。

$ StaffContractTypeData = array();//選択に必要なデータオプション

    $options=array();//temp storage array
    $i=0;//iteration counter

    $fk_id_staff_contract_type->addMultiOption("","");//one empty option in my select 

    foreach($StaffContractTypeData as $v) {

        if(in_array($v["code"], $options)){//append the iterator value
            $fk_id_staff_contract_type->addMultiOption($v["code"].$i,$v["label"]);
        }else{
            $fk_id_staff_contract_type->addMultiOption($v["code"],$v["label"]);
            array_push($options, $v["code"]);
        }
        $i++;//change iterator value
    }
于 2013-01-15T12:21:26.773 に答える
0

TDBishopによって提案されたように、私はコードに小さな変更を加えました。

$this->addMultiOption('','-- Select ****** --');
foreach($options as $option) {
    $this->addMultiOption($option->value."_".$option->caption,$option->caption);
}

ここで、前に述べたように、キャプションは常に異なっていたので、「値」が同じであっても、接尾辞にキャプションを追加すると、それぞれの新しい値が異なるようになります。これで、データを分析しながら、explodeを使用して値を解析し、両方を利用することができました。:)

于 2012-06-05T17:32:11.040 に答える