Zend Framework addMultiOption为选项添加"rel"等自定义参数

chr*_*ris 1 php zend-framework zend-form-select

我正在使用Zend,我们有一个通过一系列功能组合在一起的表单.其中特别addMultiOption,这是正在从数据库拉(从那里我不知道,因为如果我可以改变的查询时,会觉得很容易,更好.反正是说我需要添加一个"相对"属性为每个选项/选项所以我可以选择该选项时通过jquery在选项上执行任务,它不是所有选项,而是一些没有额外功能的选项将具有0,其中作为具有动作的选项将有一个"一"的rel来自数据库所以.我试图找出如何在值之外添加额外的属性

Zend Framework是否支持这一点,如果不能,我怎样才能实现这一目标?我之前发现了我认为这篇文章不错的帖子,但事实证明它对我不起作用

Ste*_*ill 5

使用addMultiOption($ value,$ label)我只需将value参数设置为:

$value = $id . '" ref="' . $ref;
Run Code Online (Sandbox Code Playgroud)

当它呈现时,你得到:

<option value="<idValue>" ref="<refValue"><labelValue></option>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助....

好的,值被转义,但是optionClasses不会在添加addMultiOptions(val,lable)的循环中这样做我做这样的事情:

$optionClasses[<val>] = 'ref_' . <val> . '" ref="' . <ref>;
Run Code Online (Sandbox Code Playgroud)

然后在循环之后只做一个setAttrib('optionClasses',$ optionClasses)

这实际上有效......

所以这里有一个例子,我将定义一个数组,该数组可能是来自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)
           );
Run Code Online (Sandbox Code Playgroud)

我将在表单元素定义(在扩展Zend_Form的类中)中使用它来进行选择,其中选项具有名为'offset'的属性,该属性将具有来自数组的'offset'值

$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);
Run Code Online (Sandbox Code Playgroud)

当渲染它时,它会产生一个选择元素,如

<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>
Run Code Online (Sandbox Code Playgroud)

然后你可以使用jQuery获得所选选项的偏移量

 var xoffset = $("#code_id").find("option:selected").attr("xoffset");
Run Code Online (Sandbox Code Playgroud)

这是因为optionClasses结果类属性不会像value属性那样被渲染方法转义.