バッチ作成とバッチ更新で同じフィールドセットを複数回レンダリングしたいのですが。 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"> </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でそれらを上書きすることです。他のアイデアは?または、これはすでに何らかの形で実装されており、機能をチェックすることで表面的なものでしたか?
回避策は必要ありません。 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>