chr*_*ris 1 php zend-framework zend-form-select
我正在使用Zend,我们有一个通过一系列功能组合在一起的表单.其中特别addMultiOption,这是正在从数据库拉(从那里我不知道,因为如果我可以改变的查询时,会觉得很容易,更好.反正是说我需要添加一个"相对"属性为每个选项/选项所以我可以选择该选项时通过jquery在选项上执行任务,它不是所有选项,而是一些没有额外功能的选项将具有0,其中作为具有动作的选项将有一个"一"的rel来自数据库所以.我试图找出如何在值之外添加额外的属性
Zend Framework是否支持这一点,如果不能,我怎样才能实现这一目标?我之前发现了我认为这篇文章不错的帖子,但事实证明它对我不起作用
使用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属性那样被渲染方法转义.