web-dev-qa-db-ja.com

同じフィールドセットを複数回レンダリングすることは可能ですか?

バッチ作成とバッチ更新で同じフィールドセットを複数回レンダリングしたいのですが。 JFormsでこれを行うことは可能ですか?

現在、私はこのようなフォームを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<form name="customer_registration_form" title="COM_CANTEEN_CUSTOMER_REGISTRATION_TITLE" description="COM_CANTEEN_CUSTOMER_REGISTRATION_DESCRIPTION" buttonLabel="COM_CANTEEN_CUSTOMER_REGISTRATION_BUTTON_LABEL" class="customer-registration">
    <fields name="customer_registration">
        <fieldset name="customer_registration">
            <field name="name" type="text" required="true" size="80"
                validate="text" minLength="4" maxLength="80" pattern="^\p{L}+(?:[\p{Zs}-]\p{L}+)+$" 
                label="COM_CANTEEN_CUSTOMER_REGISTRATION_NAME_LABEL" description="COM_CANTEEN_CUSTOMER_REGISTRATION_NAME_DESCRIPTION" message="COM_CANTEEN_CUSTOMER_REGISTRATION_NAME_MESSAGE" />
            <field name="age" type="integer" required="true" default="6" first="1" last="150" step="1"
                validate="integer" min="1" max="150"
                label="COM_CANTEEN_CUSTOMER_REGISTRATION_AGE_LABEL" description="COM_CANTEEN_CUSTOMER_REGISTRATION_AGE_DESCRIPTION" message="COM_CANTEEN_CUSTOMER_REGISTRATION_AGE_MESSAGE" />
            <field name="permanent_orderer" type="checkbox" default="1"
                label="COM_CANTEEN_CUSTOMER_REGISTRATION_PERMANENT_ORDERER_LABEL" description="COM_CANTEEN_CUSTOMER_REGISTRATION_PERMANENT_ORDERER_DESCRIPTION" message="COM_CANTEEN_CUSTOMER_REGISTRATION_PERMANENT_ORDERER_MESSAGE" />
        </fieldset>
    </fields>
</form>

私はこのレイアウトでレンダリングします:

<?php
extract($displayData);
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo $action; ?>"
      method="post" name="<?php echo $form->getAttribute('name'); ?>" class="<?php echo $form->getAttribute('class'); ?> basic-form-layout">
    <legend><?php echo JText::_($form->getAttribute('title')); ?></legend>
    <?php
        echo JText::_($form->getAttribute('description'));
        foreach (array_keys($form->getFieldsets()) as $fieldset)
            echo $form->renderFieldset($fieldset);
    ?>
    <?php echo JHtml::_('form.token'); ?>
    <div class="control-group">
        <div class="control-label">&nbsp;</div>
        <div class="controls">
            <button type="submit"><?php echo JText::_($form->getAttribute('buttonLabel')); ?></button>
        </div>
    </div>
</form>

フォームを送信することで、customer_registration[field]配列を取得しました。代わりにcustomer_registration[i][field]またはcustomer_registration[field][i]配列を取得したいのですが。これは何らかの形でサポートされていますか、それとも回避策を作成する必要がありますか?

レンダリング部分は問題ありませんが、renderFieldsetを複数回呼び出す必要があると思いますが、customer_registrationをオーバーライドしてcustomer_registration[i]を取得するにはどうすればよいですか?私が思いつく唯一の解決策は、フィールドセットをレンダリングし、結果のhtmlでフィールド名を見つけ、正規表現またはsimplexmlでそれらを上書きすることです。他のアイデアは?または、これはすでに何らかの形で実装されており、機能をチェックすることで表面的なものでしたか?

2
inf3rno

回避策は必要ありません。 I コードをチェックした 、JFormのインスタンス化によって指定できる制御オプションがあります。設定されている場合は、フィールド名のルートになります。

Vanilla joomlaを使用すると、次のようになります(自分のラッパークラスでテストしました)。

JHtml::_('behavior.tooltip');

$fileName = 'myform.xml';
$input = JFactory::getApplication()->input;
$isPost = $input->getMethod() == 'POST';
if ($isPost)
    $data= $input->post->getArray();
?><form action="<?php echo JUri::getInstance(); ?>"><?php
    for ($i = 0; $i < 13; ++$i) {
        $randomName = uniqid($fileName . '.');
        $form = JForm::getInstance(
            $randomName, 
            JPATH_COMPONENT . '/my/templates/' . $fileName, 
            array('control' => $i)
        );
        if ($isPost) {
            $filtered = $form->filter($data[$i]);
            foreach ($filtered as $fieldset => $fields)
                foreach ($fields as $field => $value)
                    $form->setValue($field, $fieldset, $value);
        }
        foreach (array_keys($form->getFieldsets()) as $fieldset)
            echo $form->renderFieldset($fieldset);
    }
    echo JHtml::_('form.token'); ?>
    <button type="submit">send</button>
</form>
1
inf3rno