Le champ de type subform est disponible depuis la version 3.6 de Joomla.

C'est un champ extrêmement puissant.

Il permet d'injecter des sous-formulaires dans un formulaire, avec possibilité d'ajout de suppression, et de déplacement par simple glisser/déposer.

Dans le formulaire de base on défini un champ de type subform, généralement dans un groupe fieldset séparé.

Exemple :

<fieldset name="epreuves" label="COM_GSKIEPREUVES_MAJCALENDRIER_EPREUVES_LABEL">
<field
name="epreuves"
type="subform"
formsource="/administrator/components/com_gskiepreuves/models/forms/majcalendrierepreuve.xml"
multiple="true"
label="Epreuves"
description="Liste des epreuves"
min= "1"
max= "9"
buttons= "none"
layout="joomla.form.field.subform.repeatable" groupByFieldset="false" />
</fieldset>

Attributs

En plus des attributs standards des champ du framework voici quelques spécifiques :

  • default : valeur par défaut au format Json
  • formsource : chemin du fixhier xml décrivant le sous-formulaire. Sa structure sera la même que pour le formulaire de base.
  • multiple : "true" ou "false"  ("true" par défaut) indique su les sous formulaire peut être présente plusieurs fois ou pas
  • min : si multiple = "true", nombre minimum d’occurrence (0 par défaut)
  • max : si multiple )= "true", nombre maximal d’occurrence (1000 par défaut)
  • buttons : boutons qui devront être présent : combinaison de add, remove ou move, sinon none (default buttons = "add, remove, move"
  • layout : nom du layout de sous formulaire à utiliser. 3 sous-formulaires sont disponibles dans les versions 3.6 et + de joomla, mais vous pouvez bien sur ecrire les votre.
    • joomla.form.field.subform.default
    • joomla.form.field.subform.repeatable
    • joomla.form.field.subform.repeatable-table
    Layout dont on trouvera par exemple le script en /layouts/joomla/form/field/subform/repeatable.php pour joomla.form.field.subform.repeatable (Comme la structure du nom de Layout l'indique).

Documentation officielle : https://docs.joomla.org/Subform_form_field_type/fr

 Document en cours de rédaction...