我创建了一个zend表单。我想制作一组输出html的元素:
<div class="form_wrapper">
<div class="form_label">
<label class="txtlabel" for="salary_type">Salary type</label>
<span>*</span>
</div>
<div class="form_element">
<select class="jp_select" id="salary_type" name="salary_type">
<option>..1..</option>
<option>2</option>
<option>3</option>
</select>
<input type="text" id="salary_min" class="txtinput" name="salary_min" value="Min" onfocus="if(this.value=='Min') this.value='';" onblur="if(this.value=='') this.value=('Min');">
<input type="text" id="salary_max" class="txtinput" name="salary_max" value="Max" onfocus="if(this.value=='Max') this.value='';" onblur="if(this.value=='') this.value=('Max');">
</div>
</div> <!-- end .form_wrapper -->
我的代码:
$this->addElement('select', 'salary_type', array(
'label' => 'Salary type',
'multiOptions' => $salary_types,
'class'=>'jp_select'
));
$this->addElement('text', 'salary_min', array(
'label' => 'Min',
'class'=>'txtinput'
));
$this->addElement('text', 'salary_max', array(
'label' => 'Max',
'class'=>'txtinput'
));
$this->addDisplayGroup(array('salary_type','salary_min','salary_max'), 'salary_group');
如何设置装饰器以具有如上所述的html输出
答案 0 :(得分:3)
据我所知,你无法仅使用简单的装饰器渲染那个精确的html结构。
解决此问题的一种方法是在displayGroup装饰器堆栈中使用ViewScript Decorator。在视图脚本中,您可以使用$this->element->getElements();
检索单个元素($ this-&gt;元素是Zend_Form_DisplayGroup
的实例)
例如:
$this->addDisplayGroup(
array('salary_type','salary_min','salary_max'),
'salary_group',
array(
'decorators' => array(
array('ViewScript', array('viewScript' => 'path/to/viewscript.phtml')),
),
)
);
我自己没试过,但它应该有用。