0

Zend_Form を使用してフォームを作成し、サブフォームを複数レベル深くネストしようとしています。私が求めている結果は次のとおりです。

<div id="details">
    <table class="subForm">
        <tr>
            <td>
                <!-- Element -->
            </td>
            <td>
                <!-- Element -->
            </td>
        </tr>
    </table>
</div>
<div id="content">
    <table class="subForm">
        <tr>
            <td>
                <!-- Element -->
            </td>
            <td>
                <!-- Element -->
            </td>
        </tr>
    </table>
</div>

現在これを行うために、要素とデコレーターを含むサブフォームを作成し、それをデコレーターを含む (要素なしで) サブフォームにアタッチし、それをフォームにアタッチしました。

// create sub form container decorators
public $subFormContainerDecorators = array(
    array('FormElements'),
    array(array('data' => 'HtmlTag'), array('tag' => 'div', 
                                            'id'  => 'details'))
);

// create sub form decorators
public $subFormDecorators = array(
    array('FormElements'),
    array(array('data' => 'HtmlTag'), array('tag'   => 'table', 
                                            'class' => 'subForm'))
);

// create sub form and attach elements
$details = new Zend_Form_SubForm();
$details->setDecorators($this->subFormDecorators);
$details->addElement($name)
        ->addElement($save);

// create container div
$detailsContainer = new Zend_Form_SubForm();
$detailsContainer->setDecorators($this->subFormContainerDecorators);
$detailsContainer->addSubForm($details, 'details');

// attach subform container to main form
$this->addSubForm($detailsContainer, 'detailsContainer');

これは、現在、必要なネストされたレベルを達成できると思われる唯一の方法です。ただし、これには、すべてのコンテナーのデコレーターと、各サブフォーム セットのサブフォームを作成する必要もあります。これを達成する他の方法はわかりませんが、これよりも良い方法があると確信しています。

誰かが助けることができれば、それは大歓迎です。

4

1 に答える 1

1

div HtmlTag デコレーターを $sbFormDecorators に追加するだけで、コンテナーのことはまったく忘れてしまいます。

public $subFormDecorators = array(
    array('FormElements'),
    array(array('data' => 'HtmlTag'), array('tag' => 'table', 'class' => 'subForm')),
    array(array('dataContainer' => 'HtmlTag'), array('tag' => 'div', 'id'  => 'details')),
);
于 2012-04-17T10:02:08.377 に答える