English 中文(简体)
Zend 表单:在文本字段右侧添加链接
原标题:
  • 时间:2009-03-13 17:21:16
  •  标签:

我知道我应该能做到这个,但我不知道该怎么说,我不明白。我甚至一直阅读 RTFM(Read The Fine Manual,阅读细则) 直到眼睛都花了。我最喜欢通过实例学习,而不是 Zend 文档中提供的深度解释,或者通常会产生这种类型问题的 “使用装饰器” 的典型回答。我需要的是这样的标记:

<dt>
    <label for="name">Name</label>
</dt>
<dd>
    <input type="text" name="name" id="name" value="">
    <a href="#">My Link</a>
</dd>

除了输入后的额外链接外,所有都是原味。 是的,它在“dd”内,紧挨着链接,这就是我无法实现的。

这是我用来创建上面HTML的(稍作修改的)代码。

$name = new Zend_Form_Element_Text(  name  );
$name->setLabel(  Name  );        
$this->addElements( $name );
$this->addDisplayGroup( array(  name  ),  people );

任何示例代码或更好的解释都会让这个菜鸟非常非常高兴。

干杯!

最佳回答

请看我在邮件列表中对此主题的回复和我关于此的博客文章。这基本上是Aaron所描述的相同过程。

您还可以使用装饰器方式,使用描述属性来保存链接(未经测试):

<?php
$foo = new Zend_Form_Element_Text( name );
$foo->setLabel( Name )
    ->setDescription( <a href="#">Link</a> )
    ->setDecorators(array(
         ViewHelper ,
        array( Description , array( escape  => false,  tag  => false)),
        array( HtmlTag , array( tag  =>  dd )),
        array( Label , array( tag  =>  dt )),
         Errors ,
      ));
$form->addElement($foo);

我不确定在Description修饰符中 tag =>false 是否有效,但是值得一试。很抱歉我现在无法测试,因为我的开发工具目前已经损坏。如果失败,请尝试使用这两个链接中描述的手动修饰符渲染方法。

问题回答

我认为您正在寻找通过视图脚本完全控制装饰器的方法:

Zend框架手册

基本上,你想要设置元素的viewScript属性为你的脚本路径,然后传递任何你想要发送的额外信息,可能是链接的linkHref或title。

$name = new Zend_Form_Element_Text(  name  );
$name->setLabel(  Name  );   
$name->viewScript =  path/to/viewScript.phtml ;
$name->decorators = array( ViewScript , array( linkHref  =>  # ,
                                               linkTitle  =>  My Link );
$this->addElements( $name );
$this->addDisplayGroup( array(  name  ),  people );

然后,您的viewScript会像这样,我不确定所有Helpers是否在Zend_Form_Element实例的一个实例内,但它有点像这样:

<dt><?= $this->formLabel($this->element->getName(),
                     $this->element->getLabel()) ?></dt>
<dd><?= $this->{$this->element->helper}(
                     $this->element->getName(),
                     $this->element->getValue(),
                     $this->element->getAttribs()
                ) ?>
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a>
<?= $this->formErrors($this->element->getMessages()) ?>

</dd>

有时候,在视图脚本中执行它更好,因为这样可以百分之百地控制元素,同时仍然保持DRY。

只是为了支持Aaron的帖子,在经过数小时的头痛来做一些真正简单的事情之后(这似乎有悖于拥有框架的要点),如果您发现这在您的复选框上不起作用,那是因为您必须在您的.phtml中使用这个(基于Aaron的示例):

<dt><?= $this->formLabel($this->element->getName(),
                     $this->element->getLabel()) ?></dt>
<dd><?= $this->{$this->element->helper}(
                     $this->element->getName(),
                     $this->element->getValue(),
                     $this->element->getAttribs(),
                     $this->element->options
                ) ?>
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a>
<?= $this->formErrors($this->element->getMessages()) ?>

</dd>

选项!选项!选项!当我需要找到你时,你在哪里?!如果您正在使用复选框,则不要忘记将以下内容添加到您的帮助程序中:

$this->element->options

这对于使用 Zend_Form_Element_Checkbox 添加 条款和条件 复选框非常有效(这是为了SEO)。





相关问题
热门标签