アイテムモデル
protected function preprocessForm(JForm $form, $data, $group = 'examplegroup')
{
foreach ($data as $i => $item) {
$field = new \SimpleXMLElement('<field />');
$field->addAttribute('name', 'sample[' . $i . ']');
$field->addAttribute('class', 'input-mini');
$field->addAttribute('type', 'number');
$form->setField($field, 'data');
$form->setValue('sample[' . $i . ']', 'examplegroup', $item->fieldname);
...
}
...
}
レイアウト
<?php foreach ($this->items->data as $i => $item) : ?>
<?php echo $this->form->getInput('sample[' . $i . ], 'examplegroup'); ?>
出力
<input type="number" name="jform[examplegroup][sample[0]]" value="6" class="input-mini">
このような名前を取得するにはどうすればよいですかname="jform[examplegroup][sample][0]"
?フォームは動的に生成する必要があり、コードにstaticという名前を書き込むことではありません。
機能するように縫い合わせるソリューションを見つけました。
次のような通常のjform
コントロールクラスなしでフォームを作成します。
// $form = $this->loadForm('my_comp.examplegroup', 'examplegroup', array('control' => 'jform', 'load_data' => $loadData));
$form = $this->loadForm('my_comp.examplegroup', 'examplegroup', array('control' => '', 'load_data' => $loadData));
次に、フィールド全体を動的に作成します。
protected function preprocessForm(JForm $form, $data, $group = 'examplegroup')
{
$field = new \SimpleXMLElement('<field />');
$field->addAttribute('name', 'jform[' . $i . '][sample]');
$form->setValue('jform[' . $i . '][sample]', '', $item['sample']);
...