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

时间:2012-06-29 19:17:47

标签: php zend-framework zend-form-select

我正在使用Zend,我们有一个通过一系列功能组合在一起的表单。其中一个特别是addMultiOption,其中一个是从数据库中引入的(我不知道,如果我可以改变查询,那将会更容易和更好。无论如何,我说我需要添加一个“rel”属性为每个选项/选项所以我可以选择该选项时通过jquery在选项上执行任务,它不是所有选项,而是一些没有额外功能的选项将具有0,其中作为具有动作的选项这将来自数据库的“一个”。我试图弄清楚如何在值之外添加额外的属性

Zend Framework是否支持此功能,如果不支持,我该如何实现?我之前发现了我认为这篇文章不错的帖子,但事实证明它对我不起作用

1 个答案:

答案 0 :(得分: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)

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

所以这里有一个例子,我将定义一个数组,该数组可能是来自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的类中)中使用它来进行选择,其中选项具有名为“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);

当渲染它时,它会产生一个像

这样的选择元素
<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属性那样被渲染方法转义。