J'essaie donc de comprendre la création de champs à la volée en utilisant JForm::setField
. Mais comme d'habitude, il n'y a pas de documentation expliquant comment utiliser cette méthode uniquement avec la description d'API minimale.
Je veux ajouter un certain nombre de champs à un fieldset dans un formulaire à la volée. J'ai compris que $group
_ n’est pas le nom du champs, je ne comprends donc pas ce qu’il est censé faire ...?
J'ai ajouté le champ avec succès en utilisant les éléments suivants:
$element = new SimpleXMLElement('<field name="onfly"
type="text"
label="onfly"
description="onfly desc"
class="inputbox"
size="30"
required="true" />');
$form->setField($element);
Mais je ne peux pas l'ajouter au fieldet que je veux. Je peux ajouter le <fieldset>
balises à $element
mais cela supprime tous les champs préexistants de cet ensemble de champs.
De plus, comme je vais utiliser une boucle pour ajouter plusieurs champs, devrais-je utiliser JForm::setFields
au lieu? Dans ce cas, je ne sais pas comment utiliser cette méthode!
Toute aide serait appréciée! Merci
Je ne suis pas sûr, mais vous pouvez essayer la méthode load
:
$element = '
<field name="onfly"
type="text"
label="onfly"
description="onfly desc"
class="inputbox"
size="30"
required="true" />
';
// Define your fieldset here
$xpath = '//fieldset[@name="yourfieldset"]';
JForm->load($element, false, $xpath);
La solution que j'ai utilisée ici était d'oublier d'essayer d'ajouter le champ à un ensemble de champs préexistant et d'ajouter plusieurs champs à un groupe.
$newfields = array(1, 2, 3, 4, 5)
$elements = array();
foreach ($newfields as $field) {
$elements[] = new SimpleXMLElement('<field name="onfly_'.$field.'"
type="text"
label="onfly_'.$field.'"
description="onfly desc"
class="inputbox"
size="30"
required="true" />');
}
$form->setFields($elements, 'newGroup');
Cela m'a permis de parcourir en boucle chaque champ du groupe pour les rendre tous.
foreach ($this->form->getGroup('newGroup') as $field) {
echo $field->renderField($options);
}
Il semble que vous ne puissiez pas ajouter de nouveau champ dans les champs existants. Vous devez créer un nouveau groupe de champs au format suivant
$element = new SimpleXMLElement('<fieldset name="any_name">
<field name="onfly"
type="text"
label="onfly"
description="onfly desc"
class="inputbox"
size="30"
required="true" />
</fieldset>');
$form->setField($element);
Vous pouvez utiliser plusieurs balises field
dans la même balise fieldset
.
Une autre solution pourrait être (je ne suis pas sûr): vous pouvez lire le fichier xml, trouver le fieldset et y ajouter des enfants. Ensuite, vous pouvez charger la nouvelle chaîne xml dans la même instance $ form.