0

フォーム全体にZend_Form_Decorator_HtmlTagがあります。私が取得したいのは次のようなものです:

<div class="form-elements">
    <div>
        <label>blah</label>
        <input type="text" />
    </div>

    <div>
        <label>blah 2</label>
        <input type="checkbox" />
    </div>
</div>

<div class="form-buttons">
    <input type="submit" />
</div>

HtmlTag(ここに入力)内の特定の要素と他の要素タグ内の他の要素のみを取得するにはどうすればよいですか?私は今かなりの数のフォームを持っているので、私の基本フォームクラスだけを変更することができれば素晴らしいでしょう。

4

1 に答える 1

1

このメソッドを基本フォームクラスに追加します。

public function loadDefaultDecorators()
{
    $elementsToGroup = array();
    foreach ($this->getElements() as $element) {
        if ($element->getType() != 'Zend_Form_Element_Submit') {
            $elementsToGroup[] = $element;
        }
    }
    if ($elementsToGroup) {
        $this->addDisplayGroup($elementsToGroup, 'form-elements', array(
            'order' => 0,
            'decorators' => array(
                'FormElements',
                array('HtmlTag', array('tag'=>'div', 'class' => 'form-elements'))
            )
        ));
    }

    parent::loadDefaultDecorators();
}

すべてのフォーム要素をループし、ボタン以外のものを表示グループに追加します。表示グループは、デフォルトのフィールドセットをオーバーライドする「div」デコレータを使用してフォームに追加されます。'order'パラメータは、要素がフォームの先頭に残ることを保証します。

ボタン自体の通常のHtmlTagデコレータで実行できるボタンの周りのdiv。

これの代わりにCSSを使用するだけで目的の効果を達成できるかどうかを確認する価値があります。このアプローチでは、将来、意図したとおりに表示グループを使用したい場合に問題が発生する可能性があります。

于 2013-01-11T09:59:13.940 に答える