1

私は Zend を使用しており、一連の関数によってまとめられたフォームがあります。特に、DB から取り込まれている addMultiOption の 1 つです (クエリを変更できれば、どこからかわかりませんが、その方がはるかに簡単で、全体的に優れています。とにかく、「rel」を追加する必要があると述べました)。すべてのオプション/オプションに属性を付けて、そのオプションが選択されたときにjqueryを介してオプションでタスクを実行できるようにします。すべてのオプションではなく、いくつかの追加機能を持たないオプションのrelは0になりますが、アクションのあるものはこれはDBに由来する「1」のrelを持つことになるので、値の外に追加の属性を追加する方法を見つけようとしています

Zend Framework はこれをサポートしていますか? そうでない場合、どうすればこれを達成できますか? 私はそれについて以前にここで良い投稿だと思ったものを見つけましたが、それは私にはうまくいかないことがわかりました

4

1 に答える 1

5

addMultiOption($value,$label) を使用して、value パラメータを次のように設定しました。

$value = $id . '" ref="' . $ref;

レンダリングすると、次のようになります。

<option value="<idValue>" ref="<refValue"><labelValue></option>

お役に立てれば....

さて、値はエスケープされますが、optionClasses はループ内ではエスケープされず、addMultiOptions(val,lable) を追加します。次のようにします。

$optionClasses[<val>] = 'ref_' . <val> . '" ref="' . <ref>;

そして、ループの後に setAttrib('optionClasses',$optionClasses) を実行します

そして、それは実際に機能します...

これは、使用する 3 つの部分を含む db クエリからのレコードセットである可能性のある配列を定義する例です。ID、コード、オフセット

$records = array( array('id' => 1, 'code' => 'Code 1', 'offset' => 4),
                  array('id' => 2, 'code' => 'Code 2', 'offset' => 5),
                  array('id' => 3, 'code' => 'Code 3', 'offset' => 6)
           );

そして、これをフォーム要素定義 (Zend_Form を拡張するクラス内) で使用して、オプションが配列からの「オフセット」値を持つ「オフセット」と呼ばれる属性を持つ選択を行います。

$e = $this->createElement('select', 'code_id');
$e->setLabel('Event Type:')
    ->setAttrib('size', 1);
$optionClasses = array();
foreach ($records as $record) {
    $optionClass = 'xcode_' . $record['id'] . '" xoffset="' . $record['offset'];
    $optionClasses[$record['id']] = $optionClass;
    $e->addMultiOption($record['id'],$record['code']);
}
$e->setAttrib('optionClasses', $optionClasses);
$this->addElement($e);

これがレンダリングされると、次のような選択要素が生成されます

<select name="code_id" id="code_id">
    <option value="1" class="xcode_1" xoffset="4" selected="selected">Code 1</option>
    <option value="2" class="xcode_2" xoffset="5">Code 2</option>
    <option value="3" class="xcode_3" xoffset="6">Code 3</option>
</select>

次に、jQueryを使用して、選択したオプションのオフセットを取得できます

 var xoffset = $("#code_id").find("option:selected").attr("xoffset");

これが機能するのは、optionClasses の結果のクラス属性が、value 属性のようにレンダリング メソッドによってエスケープされないためです。

于 2013-05-15T12:37:17.677 に答える