我正在尝试删除隐藏表单元素上的默认装饰器。默认情况下,隐藏元素显示如下:
<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>
我不希望我的隐藏元素占用我页面上的空间。我想删除所有默认装饰器,所以我剩下的就是输入标签。
<input type="hidden" name="foobar" value="1" id="foobar">
我怎样才能做到这一点?
答案 0 :(得分:50)
对于隐藏字段,您只需要一个装饰器 - ViewHelper:
$field = new Zend_Form_Element_Hidden('id');
$field->setDecorators(array('ViewHelper'));
这将只渲染输入字段,没有Dt-Dd包装和标签。
答案 1 :(得分:32)
默认装饰器不需要 装载
默认情况下,默认装饰器是 在对象初始化期间加载 你可以通过传递来禁用它 'disableLoadDefaultDecorators'选项 到构造函数:
$element = new Zend_Form_Element('foo', array('disableLoadDefaultDecorators' => true) );
答案 2 :(得分:24)
我用这个
$element->removeDecorator('DtDdWrapper');
去掉特定元素周围的dt dd标签
答案 3 :(得分:6)
//基于上面 - 一个向$ this form添加隐藏元素的简单函数
/**
* Add Hidden Element
* @param $field
* @param value
* @return nothing - adds hidden element
* */
public function addHid($field, $value){
$hiddenIdField = new Zend_Form_Element_Hidden($field);
$hiddenIdField->setValue($value)
->removeDecorator('label')
->removeDecorator('HtmlTag');
$this->addElement($hiddenIdField);
}
答案 4 :(得分:5)
当您有大量隐藏输入时,最佳答案如下:
$elements = $this->getElements();
foreach ($elements as $elem)
if ($elem instanceof Zend_Form_Element_Hidden)
$elem->removeDecorator('label')->removeDecorator('HtmlTag');
答案 5 :(得分:4)
正如其他帖子setDisableLoadDefaultDecorators(true)
中提到的那样,如果它们已经加载了就行不通......但是clearDecorators()
会这样做!
答案 6 :(得分:3)
我无法让disableLoadDefaultDecorators工作得很好。这是我提出的解决方案。
$hiddenIdField = new Zend_Form_Element_Hidden('id');
$hiddenIdField->setValue($portalId)
->removeDecorator('label')
->removeDecorator('HtmlTag');
在HTML中,隐藏字段显示时没有任何额外标签。
...
<dt><label for="password" class="required">Password</label></dt>
<dd><input type="password" name="password" id="password" value="" /></dd>
<input type="hidden" name="id" value="1" id="id" />
...
答案 7 :(得分:2)
答案 8 :(得分:2)
如果您仍在使用<dl>
包装器,则仅使用单个“ViewHelper”装饰器将生成无效标记。 ZF-2718中概述了另一种方法。这会将隐藏字段添加到包含在<dd>
。
答案 9 :(得分:2)
那么,2012年仍然是同一个问题。如果删除装饰器,html将不会验证。如果你离开它们,隐藏的元素会占用空间。在我的所有项目中,我都有一个CSS帮助器.hidden,所以我只是将它应用到<dd>
并取消设置标签:
$element = new Zend_Form_Element_Hidden('foo', array('value' => 'bar'));
$element->removeDecorator('Label');
$element->getDecorator('HtmlTag')->setOption('class', 'hidden');
有效的html(5),漂亮的表格。这也可以进入隐藏字段的自定义装饰器。
修改强>
这就是我把它放到我自己的表单元素中的方式:
class Exanto_Form_Element_Hidden extends Zend_Form_Element_Hidden
{
public function render(Zend_View_Interface $view = null)
{
$this->removeDecorator('Label');
$this->getDecorator('HtmlTag')->setOption('class', 'hidden');
return parent::render($view);
}
}
答案 10 :(得分:0)
使用此:
foreach ($this->getElements() as $element) {
$decorator = $element->getDecorator('label');
if (!$decorator) {
continue;
}
$decorator->removeOption('tag');
}