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://weerophinney.net/matthew/archives/215-Rendering-Zend_Form-decorators-individually.html )。デコレータの使用方法を本当に知りたい場合は、そのシリーズの残りの部分も同様に役立ちます。

ViewRenderer デコレーターを使用すると、基本的にテンプレートに対してフォームをレンダリングします (MVC 自体とは異なります)。このようにして、すべてを完全に制御できますが、もちろん、柔軟性で得られるものは、RAD で失われ、複雑さで補われます。

于 2009-10-26T01:09:46.347 に答える