我在整个表单上都有Zend_Form_Decorator_HtmlTag。我想得到的是这样的:
<div class="form-elements">
<div>
<label>blah</label>
<input type="text" />
</div>
<div>
<label>blah 2</label>
<input type="checkbox" />
</div>
</div>
<div class="form-buttons">
<input type="submit" />
</div>
如何只获取HtmlTag中的某些元素(此处为输入),以及其他元素标记内的其他元素?我现在有很多表格,所以如果只修改我的基本表格类,那就太棒了。
答案 0 :(得分:1)
将此方法添加到基本表单类:
public function loadDefaultDecorators()
{
$elementsToGroup = array();
foreach ($this->getElements() as $element) {
if ($element->getType() != 'Zend_Form_Element_Submit') {
$elementsToGroup[] = $element;
}
}
if ($elementsToGroup) {
$this->addDisplayGroup($elementsToGroup, 'form-elements', array(
'order' => 0,
'decorators' => array(
'FormElements',
array('HtmlTag', array('tag'=>'div', 'class' => 'form-elements'))
)
));
}
parent::loadDefaultDecorators();
}
它循环遍历所有表单元素,并将任何不是按钮的内容添加到显示组,然后将其添加到表单中,并使用“div”装饰器覆盖默认字段集1。 'order'参数确保元素保留在表单的开头。
按钮周围的div可以使用普通的HtmlTag装饰器来实现。
如果您可以使用CSS而不是使用CSS来实现您想要的效果,这可能是值得的,因为如果您想要使用显示组来实现它们的目的,这种方法将来可能会给您带来一些问题。