表单元素装饰器

时间:2012-08-09 08:31:04

标签: php zend-framework zend-form zend-decorators

我一直在尝试使用Zend_Form和Decorators创建自定义表单,所需的html格式如下:

<form enctype="application/x-www-form-urlencoded" method="post" action="">
    <div class="login_bx">
        <div id="txtAccount-label" class="txt_field">
            <label for="txtAccount" class="required">Account ID:</label>
        </div>
        <div class="inp_field">
            <input type="text" name="txtAccount" id="txtAccount" value="" style="width:250px">
        </div>
    </div>
</form>

Zend_Form类的内容如下:

$account    =   new Zend_Form_Element_Text('txtAccount');
        $account    ->  setLabel('Account ID:')
                    ->  setAttrib('style','width:250px')
                    ->  setRequired(true)
                    ->  addValidator('NotEmpty', true);

        $this->setDecorators(array(
            'FormElements',
            array(
                'HtmlTag', 
                array(
                    'tag'   =>  'div',
                    'class' =>  'login_bx',
                )
            ),
            'Form',
            array('FormErrors', array(
                'placement'                 =>  'prepend', 
                'markupElementLabelEnd'     =>  '</strong>', 
                'markupElementLabelStart'   =>  '<strong>', 
                'markupListStart'           =>  '<div class="errors_list" id="msg">', 
                'markupListEnd'             =>  '</div>', 
                'markupListItemStart'       =>  '<div class="error_item">', 
                'markupListItemEnd'         =>  '</div>'
            ))
        ));

        $this->addElements(array($account));

        $this->setElementDecorators(array(
            'ViewHelper',
            //'Errors',
            array(array(
                'data' => 'HtmlTag'
                ), array(
                    'tag'   =>  'div',
                    'class' =>  'inp_field'
                )
            ),
            array('Label', array(
                'tag'   =>  'div',
                'class' =>  'txt_field'
            ))
        ));

当前呈现的html如下:

<form enctype="application/x-www-form-urlencoded" method="post" action="">
    <div class="login_bx">
        <div id="txtAccount-label">
            <label for="txtAccount" class="txt_field required">Account ID:</label>
        </div>
        <div class="inp_field">
            <input type="text" name="txtAccount" id="txtAccount" value="" style="width:250px">
        </div>
    </div>
</form>

我无法弄清楚如何将类添加到包装标签的DIV

2 个答案:

答案 0 :(得分:1)

而不是

array('Label', array(
                'tag'   =>  'div',
                'class' =>  'txt_field'
            ))

使用

array('Label', array(
                'tag'   =>  'div',
                'tagClass' =>  'txt_field'
            ))

答案 1 :(得分:0)

试试这个

$name = new Zend_From_Element_Text("txtName");
$name->setOptions(array('class'=>'css class name'));

http://forums.zend.com/viewtopic.php?f=69&t=1367

或者

how to add special class for labels and errors on zend form elements?