1

我对装饰器的工作方式完全感到困惑。这是我试图实现的 html 结构:

<form id="" action="" method="post">

    <fieldset><legend>Contact form</legend>
        <p>
            <label for="name">Name</label>
            <input type="text" name="name" id="name" size="30" />
        </p>
        <p>
            <label for="email">Email</label>
            <input type="text" name="email" id="email" size="30" />
        </p>
        <p>
            <label for="web">Website</label>
            <input type="text" name="web" id="web" size="30" />
        </p>                                                                                    
        <p>
            <label for="message">Message</label>
            <textarea name="message" id="message" cols="30" rows="10"></textarea>
        </p>                    

        <p class="submit"><button type="submit">Send</button></p>       

    </fieldset>                 

</form> 

如何摆脱定义列表格式并改用基于段落标签的布局?

更新:我有没有办法将此样式应用于我创建的所有表单?而不是必须将装饰器应用于每个表单?

4

2 回答 2

1

如果要更改表单的元素,则必须重置表单的装饰器及其元素。

将字段包含在 p-tag 中的示例

class Default_Form_Contact extends Zend_Form 
{
    public function init()
    {
        $name = new Zend_Form_Element_Text('name');
        $name->setLabel('Name:')
             ->setDecorators(
                array(
                  array('ViewHelper', array('helper' => 'formText')),
                  'Errors',
                  array('Description', array('tag' => 'p', 'class' => 'description')),
                  array('HtmlTag', array('tag' => 'p', 'id'  => 'name-element')),
                  array('Label', array('class' => 'label')),
                )
              ); 
        $this->addElement($name);
    }    
}

你真正需要哪些装饰器,你必须自己考虑。对于表单装饰器,您可以在 init()

$this->setDecorators(array(some decorators));
于 2009-10-26T12:29:37.053 回答
0

过了一会儿,我就放弃了,只使用了 ViewRenderer 装饰器。这是一篇很好的文章,解释了如何做到这一点(http://weierophinney.net/matthew/archives/215-Rendering-Zend_Form-decorators-individually.html)。如果您真的想知道如何使用装饰器,该系列的其余部分也很好。

使用 ViewRenderer 装饰器,您基本上是针对模板呈现表单(与 MVC 本身不同)。这种方式使您可以对所有事情进行最终控制,但当然,您在灵活性方面获得了什么,您在 RAD 中失去了什么,并且您在复杂性中弥补。

于 2009-10-26T01:09:46.347 回答