只有某些元素的Zend_Form和HtmlTag装饰器

时间:2013-01-11 09:23:14

标签: zend-framework zend-form

我在整个表单上都有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中的某些元素(此处为输入),以及其他元素标记内的其他元素?我现在有很多表格,所以如果只修改我的基本表格类,那就太棒了。

1 个答案:

答案 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来实现您想要的效果,这可能是值得的,因为如果您想要使用显示组来实现它们的目的,这种方法将来可能会给您带来一些问题。