【问题标题】:Zend Framework addMultiOption adding custom parameters like "rel" for optionsZend 框架 addMultiOption 为选项添加自定义参数,如“rel”
【发布时间】:2012-06-29 19:17:46
【问题描述】:

我使用 Zend,我们有一个通过一系列函数组合在一起的表单。一个特别的 addMultiOption,它是从数据库中提取的(从我不知道的地方,因为如果我可以改变查询,那会更容易和更好。无论如何,我需要添加一个“rel”归因于每个选项/选项,因此我可以通过jQuery在选项中进行选项上的任务,而不是所有选项,但其中有些选项,没有额外功能的选项将在其中作为带有动作的rely 0的选项将有一个“一”的相对值,这来自数据库。我试图弄清楚如何在值之外添加额外的属性

Zend 框架是否支持这一点,如果不支持,我该如何实现?我发现我之前认为这是一篇不错的关于它的帖子,但事实证明它对我不起作用

【问题讨论】:

  • 页面加载时能否通过jquery添加ref标签?
  • 我可以,但这需要我对选择中的选项运行附加查询,然后运行选择中的选项以查看其中是否有匹配条件,然后添加到他们是我需要的。总体上尽量避免查询过程,因为查询的结果可能会非常大
  • 不幸的是,该链接是对我不起作用的链接之一。我收到了我无法回溯问题的 addOption 错误。

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


【解决方案1】:

使用 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)

这确实有效......

下面是一个示例,我将定义一个数组,该数组可能是来自数据库查询的记录集,其中包含我们将要使用的三个部分; 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 属性那样被渲染方法转义。

【讨论】:

  • 其实这行不通。该值被转义并被视为一个值而不是 value 和 ref 属性。仍在追求这一点,并将更新。
  • optionClasses 方法确实有效,第一次尝试更改值使用方式的尝试是无效的。我希望这些 cmets 不会使事情变得混乱......我将整理一个示例,我可以添加到答案中以尝试使事情变得清晰。
  • 非常感谢!这有很大帮助。使我免于创建自定义元素和视图帮助器
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2012-06-09
相关资源
最近更新 更多