Modèle d'article
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);
...
}
...
}
Disposition
<?php foreach ($this->items->data as $i => $item) : ?>
<?php echo $this->form->getInput('sample[' . $i . ], 'examplegroup'); ?>
Sortie
<input type="number" name="jform[examplegroup][sample[0]]" value="6" class="input-mini">
Comment puis-je obtenir ce genre de nom name="jform[examplegroup][sample][0]"
? Le formulaire doit être généré dynamiquement et non en écrivant le nom statique dans le code.
J'ai trouvé une solution qui semble fonctionner.
Créer le formulaire sans la classe de contrôle jform
habituelle comme ceci:
// $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));
Ensuite, créez les champs dynamiquement avec le nom complet:
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']);
...