我有两种形式,他们共享一些ID,因为两个输入字段称为“标题”。
Zend为我生成了一个很好的输出:
<dl class="zend-form">
<dt id="title-label">
<label for="form1-title" class="required">Description</label>
</dt>
<dd id="title-element">
<input name="form1[title]" id="form1-title" value="..." type="text">
</dd>
</dl>
现在问题是dt和dd元素被命名为错误(应该是form1-title-lable,因为这是一个子表单)。
我也尝试更改元素装饰器:
$this->addElements( ... );
$this->setElementDecorators(array(
'ViewHelper',
'Errors',
array(array('data' => 'HtmlTag'),array( 'tag' => 'dd', 'class' => 'element' )),
array(array('data' => 'Label'),array( 'tag' => 'dt', class=> 'label' ))
));
但结果并不像预期的那样。
标签已添加到我的提交按钮和 dt元素的ID仍在那里。
如何删除id属性?
编辑 - 元素声明:
$titel = new Zend_Form_Element_Text('title');
$titel->setLabel( "Title" )
->addValidator('NotEmpty', true)
->addValidator('stringLength',true, array(0, 255 ))
->setRequired(true)
->addFilter("Alnum", array(true))
->addFilter('StringTrim');
$this->addElement($titel);
答案 0 :(得分:1)
听起来更像问题在于您的子表单中没有将其名称添加到ID之前。如果您解决了这个问题,那么您将无需删除ID。
但是,如果你想使用DtDdWrapper装饰器从元素中删除ID,你可以这样做。
class Form_Foo extends Zend_Form_SubForm
{
public function init()
{
$title = new Zend_Form_Element_Text('foo_title');
$title->setLabel('Title');
$title->removeDecorator('DtDdWrapper');
$title->addDecorator(new Decorator_Foo());
$this->addElement($title);
}
}
class Decorator_Foo extends Zend_Form_Decorator_DtDdWrapper
{
public function render($content)
{
return '<dt> </dt>' .
'<dd>' . $content . '</dd>';
}
}
这应该为你提供没有ID标签的元素。
答案 1 :(得分:0)
您可以创建自定义标签装饰器,以便修改默认的渲染功能。
class App_Form_Decorator_Label extends Zend_Form_Decorator_Label
{
public function render()
{
// Insert here the render function of Zend_form_Decorator_Label but without the id decorator.
}
}