it-swarm.com.de

Dynamisches Erstellen eines mehrdimensionalen JForm-Felds

Item Model

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);
        ...
    }
    ...
}

Layout

<?php foreach ($this->items->data as $i => $item) : ?>
<?php echo $this->form->getInput('sample[' . $i . ], 'examplegroup'); ?>

Ausgabe

<input type="number" name="jform[examplegroup][sample[0]]" value="6" class="input-mini">

Wie kann ich einen solchen Namen erhalten name="jform[examplegroup][sample][0]"? Das Formular muss dynamisch generiert werden und darf nicht statisch in den Code geschrieben werden.

3
Mike

Ich habe eine Lösung gefunden, die zu funktionieren scheint.

Erstellen des Formulars ohne die übliche Steuerklasse jform wie folgt:

// $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));

Erstellen Sie dann die Felder dynamisch mit dem gesamten Namen:

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']);
...
1
Mike