Zend Form如何对这样的元素进行分组?

时间:2011-11-11 05:01:32

标签: php zend-framework zend-form

我创建了一个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输出

1 个答案:

答案 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')),
        ),
    )
);

我自己没试过,但它应该有用。