【问题标题】:Zend_Form label decoratorZend_Form 标签装饰器
【发布时间】:2012-09-28 14:12:21
【问题描述】:

标签装饰器有问题。当我生成一个表单时,我有这样的东西:

<label id="user_email-label"><label for="user_email" class="required">e-mail</label>
</label>
<input type="text" name="user_email" id="user_email" value="" class="span4">

但我需要:

<label for="user_email" class="required">e-mail</label>
<input type="text" name="user_email" id="user_email" value="" class="span4">

我的代码:

$oText = new Zend_Form_Element_Text('user_email');
$oText->clearDecorators();
$oText->setLabel($oTranslate->translate('e-mail'));
$oText->setAttrib('class','span4');
$oText->setRequired(true);
$oText->addValidator('NotEmpty', true);
$oText->addValidator('StringLength', true, array('max' => 200));
$oText->addValidator('EmailAddress', true);
$oText->addDecorator('ViewHelper');
$oText->addDecorator('Errors');
$oText->addDecorator('Label',array('tag'=>'label', 'placement' => 'prepend'));
$oText->setFilters(array('StringToLower','StringTrim'));
$this->addElement($oText);

我的第二个问题是如何在标签内放置一个复选框?当我做这样的事情时:

 $oCheckbox = new Zend_Form_Element_Checkbox('remember_me');
    $oCheckbox->setLabel($oTranslate->translate('remember me'));
    $oCheckbox->setChecked(true);
    $oCheckbox->addDecorator('HtmlTag',array('tag'=>'label','class'=>'checkbox muted'));
    $oCheckbox->removeDecorator('DtDdWrapper');
    $oCheckbox->addDecorator('Label',array('tag'=>'label'));
    $this->addElement($oCheckbox);

我有:

<label class="checkbox muted">
<input type="hidden" name="remember_me" value="0"><input type="checkbox" name="remember_me" id="remember_me" value="1" checked="checked"></label>
<label id="remember_me-label"><label for="remember_me" class="optional">remember me</label></label>

但我需要:

<label class="checkbox muted">
<input type="hidden" name="remember_me" value="0"><input type="checkbox" name="remember_me" id="remember_me" value="1" checked="checked">
remember me</label>

有什么想法吗?

问候

【问题讨论】:

  • 如果有两个问题,请问两个。将它们合二为一有点令人困惑。

标签: zend-framework zend-form


【解决方案1】:

您构建元素的部分,“标签”选项

$oText->addDecorator('Label',array('tag'=>'label', 'placement' => 'prepend'));`

不需要。将其更改为:

$oText->addDecorator('Label',array('placement' => 'prepend'));

至于第二个问题,我认为您必须编写自定义元素才能实现这一目标。或者,您可以使用视图脚本根据需要渲染元素的每个部分。

【讨论】:

  • 好的,非常感谢您的帮助。我尝试构建一个自定义装饰器类,我的代码:
【解决方案2】:

第二个查询的答案是使用标签装饰器上的 IMPLICIT_APPEND 放置。

    $oCheckbox->addDecorator('Label',array('placement' => 'IMPLICIT_APPEND'));

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多