it-swarm.dev

JForm :: setField / s - Aggiungi campo al fieldset

Quindi sto cercando di orientarmi al volo sulla creazione di campi usando JForm::setField. Ma come al solito non esiste documentazione che spieghi come utilizzare questo metodo solo con una descrizione API minima.

Voglio aggiungere un numero di campi a un set di campi in un modulo al volo. Ho capito che $group non è il nome del fieldset, quindi non capisco cosa dovrebbe fare ...?

Ho aggiunto correttamente il campo utilizzando quanto segue:

$element = new SimpleXMLElement('<field name="onfly"
                                        type="text"
                                        label="onfly"
                                        description="onfly desc"
                                        class="inputbox"
                                        size="30"
                                        required="true" />');
$form->setField($element);

Ma non posso aggiungerlo al fieldset che voglio. Posso aggiungere il <fieldset> tag a $element ma ciò cancella tutti i campi preesistenti in quel set di campi.

Inoltre, poiché userò un ciclo per aggiungere più campi, dovrei usare JForm::setFields anziché? Nel qual caso non ho idea di come usare quel metodo!

Qualsiasi aiuto sarebbe apprezzato! Grazie

4
doovers

Non sono sicuro, ma puoi provare il metodo 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 soluzione che ho usato qui era dimenticare di provare ad aggiungere il campo a un set di campi preesistente e invece aggiungere più campi a un gruppo.

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

Questo mi ha permesso di scorrere tutti i campi del gruppo per renderli tutti

foreach ($this->form->getGroup('newGroup') as $field) { 
    echo $field->renderField($options);
}
1
doovers

Sembra che non sia possibile aggiungere nuovi campi in nessun set di campi esistente. È necessario creare un nuovo set di campi nel seguente formato

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

È possibile inserire più tag field nello stesso tag fieldset.

Un altro modo alternativo potrebbe essere (non ne sono sicuro): puoi leggere il file xml, trovare il fieldset e aggiungere dei bambini ad esso. Successivamente, puoi caricare la nuova stringa xml nella stessa istanza $ form.

0
Gaurav