Zend装饰器可以很容易地将dt标签和dd输入包装在带有输入id的div中



我的目标是让ZendForm以这种方式生成我的表单:包含普通DD和DT Zend标记的DIV包装器…我的DIV需要有一个带有元素ID的ID标签,像这样:

<dl>
<div id="65-div">
<dt id="65-label"><label for="65" class="required">Nome</label></dt>
<dd id="65-element">
    <input type="text" name="65" id="65" value="">
</dd>
</div>
<div id="66-div">
...... ...
</div>
</dl>

我能够达到我的目标,这样做:

$Element = $this->createElement('text', $result->request_field__ID);
$Element->clearDecorators()
->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator(array('data'=>'HtmlTag'), array('tag' => 'dd', 'id'  => $Element->getId() . '-div', 'class' => 'zendData'))
->addDecorator(array('labelDivOpen' => 'HtmlTag'), array('tag' => 'dt', 'placement' => 'prepend', 'closeOnly' => true))
->addDecorator('Label')
->addDecorator(array('labelDivClose' => 'HtmlTag'), array('tag' => 'dt', 'id'  => $Element->getId() . '-label', 'class'=>'zendLabel','placement' => 'prepend', 'openOnly' => true))
->addDecorator(array('row' => 'HtmlTag'), array('tag' => 'div', 'id'  => $Element->getId() . '-div'));


这是最好的方法吗?

为什么我要这么做?

因为我是动态生成表单的…我想隐藏一些字段,然后在某些情况下用Jquery显示…

为了隐藏字段,我使用:

$Element->getDecorator('row')->setOptions(array('style' => 'display:none;'));

这也是最好的方法吗?

对我来说这看起来不像有效的HTML。你最好放下div并使用已经存在的dtdd上的id,所以当你想隐藏一个元素时,不要显示这些。此外,id不能以数字开头,因此您可能希望将命名方案改为element-65

最新更新