web-dev-qa-db-fra.com

JForm :: setField / s - Ajoute un champ à un jeu de champs

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

4
doovers

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);
2
Dmitry Rekun

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);
}
1
doovers

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.

0
Gaurav