将HTML标签附加或预先添加到Zend表单元素

ash*_*exm 5 zend-framework zend-form zend-decorators zend-form-element

出于样式的目的,我需要<div>在一个元素的开头放置一个开口,在另一个元素</div>的末尾放置一个结束标记.查看HtmlDecorator的文档,我似乎无法弄清楚如何正确使用它,或者这是否是正确的装饰器.为了达到这个目的,必须创建自己的装饰器似乎很浪费.

Max*_*nce 16

在要添加<div>的元素上,添加以下装饰器:

array(
    array('openDiv' =>'HtmlTag'),
    array('tag' => 'div', 'openOnly' => true)
)
Run Code Online (Sandbox Code Playgroud)

在要添加</ div>的元素上,添加以下装饰器:

array(
    array('closeDiv' =>'HtmlTag'),
    array('tag' => 'div', 'closeOnly' => true)
)
Run Code Online (Sandbox Code Playgroud)


Dav*_*aub 7

听起来你可以使用带有装饰器的显示组HtmlTag.

就像是:

$form = new Zend_Form();

$form->addElement('text', 'elt1', array(
    'label' => 'Element 1',
));
$form->addElement('text', 'elt2', array(
    'label' => 'Element 2',
));

$form->addDisplayGroup(array('elt1', 'elt2'), 'myDisplayGroup');
$group = $form->getDisplayGroup('myDisplayGroup');

$group->setDecorators(array(
   'FormElements',
   array('HtmlTag', array('tag' => 'div', 'class' => 'myClass'))
));
Run Code Online (Sandbox Code Playgroud)

这产生HTML如下:

<form method="post" action="" enctype="application/x-www-form-urlencoded">
    <dl class="zend_form">
        <div class="myClass">
            <dt id="elt1-label"><label class="optional" for="elt1">Element 1</label></dt>
            <dd id="elt1-element"><input type="text" value="" id="elt1" name="elt1"></dd>
            <dt id="elt2-label"><label class="optional" for="elt2">Element 2</label></dt>
            <dd id="elt2-element"><input type="text" value="" id="elt2" name="elt2"></dd>
        </div>
    </dl>
</form>
Run Code Online (Sandbox Code Playgroud)

当然,在所有<dl>,<dt>和<dd>疯狂内部干扰<div>标签会产生无效标记,但我认为你为表单元素指定了不同的装饰器,以便<div>包装你想要的最终会有效.

AnyMarkup装饰器也是值得注意的更常见的标记操作.