Type de champ de formulaire sous-formulaire

From Joomla! Documentation

Revision as of 09:14, 11 June 2017 by Sandra97 (talk | contribs) (Created page with "L'exemple suivant devrait pouvoir vous aider :")

The subform form field type provides a method for using XML forms inside one another or reuse forms inside an existing form. If attribute multiple is set to true then the included form will be repeatable.

The Field has two "predefined" layouts for displaying the subform as either a table or as a div container, as well as support for custom layouts.

An example XML field definition for single mode:

<field name="field-name" type="subform"
    formsource="path/to/exampleform.xml"
    label="Subform Field" description="Subform Field Description" />

An example XML field definition for multiple mode:

<field name="field-name" type="subform"
    formsource="path/to/exampleform.xml" multiple="true"
    label="Subform Field" description="Subform Field Description" />

Example XML of exampleform.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <field name="example_text" type="text" label="Example Text" />
    <field name="example_textarea" type="textarea" label="Example Textarea" cols="40" rows="8" />
</form>

An example XML of exampleform.xml with fieldsets

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fieldset name="section1" label="Section1">
        <field name="example_text" type="text" label="Example Text" />
        <field name="example_textarea" type="textarea" label="Example Textarea" cols="40" rows="8" />
    </fieldset>
    <fieldset name="section2" label="Section2">
        <field name="example_list" type="list" default="1" class="advancedSelect" label="Example List">
            <option value="1">JYES</option>
            <option value="0">JNO</option>
        </field>
    </fieldset>
</form>

Attributs de champ :

  • type (obligatoire) doit être "subform".
  • name (nom) (obligatoire) est le nom unique du champ.
  • label (étiquette) (obligatoire) (traduisible) est le titre descriptif du champ.
  • description (facultatif) (traduisible) est le texte qui s'affichera dans une info-bulle lorsque l'utilisateur passe sa souris sur la liste déroulante.
  • required (requis) (facultatif) le champ doit être complété avant la soumission du formulaire.
  • message (facultatif) le message d'erreur qui sera affiché à la place du message par défaut.
  • default (optional) is the default value, JSON string.
  • formsource (mandatory) the form source to be included. A relative path to the xml file or a valid form name which can be found by JForm::getInstance().
  • multiple (optional) whether the subform fields are repeatable or not.
  • min (optional) count of minimum repeating in multiple mode. Default: 0.
  • max (optional) count of maximum repeating in multiple mode. Default: 1000.
  • groupByFieldset (optional) whether to group the subform fields by its fieldset (true or false). Default: false.
  • buttons (optional) which buttons to show in multiple mode. Default: add,remove,move.
  • layout (optional) the name of the layout to use when displaying subform fields.

Mises en page disponibles :

  • joomla.form.field.subform.default render the subform in a div container, without support of repeating. Default for single mode.
  • joomla.form.field.subform.repeatable render the subform in a div container, used for multiple mode. Support groupByFieldset.
  • joomla.form.field.subform.repeatable-table render the subform as a table, used for multiple mode. Supports groupByFieldset. By default each field is rendered as a table column, but if groupByFieldset=true then each fieldset is rendered as a table column.

Attention

If your field in the subform has additional JavaScript logic then it may not work in multiple mode, because do not see the fields which added by the subform field dynamically. If it happened then you need to adjust your field to support it. L'exemple suivant devrait pouvoir vous aider :

jQuery(document).ready(function(){
    ... here the code for setup your field as usual...

    jQuery(document).on('subform-row-add', function(event, row){
        ... here is the code to set up the fields in the new row ...
    })
});

Because of this some extra Joomla! fields may not work for now.

Subform not provide the Validation and Filter.

Exemple

Problème

After adding new rows selects are not "chosen". See screenshot to get the idea of the problem http://static.xscreenshot.com/2016/10/29/18/screen_6917fc3c8d3c5d679b6442ff249a7b5f

Solution

Here is an example how to reinit jQuery Chosen on newly added repeated rows:

jQuery(document).ready(function(){
    jQuery(document).on('subform-row-add', function(event, row){
        jQuery(row).find('select').chosen();
    })
});

Or a PHP snippet to be used in e.g. your plugin in **onBeforeCompileHead** method or in your component view.

$doc = JFactory::getDocument();
$js = '
	jQuery(document).on(\'subform-row-add\', function(event, row){
		jQuery(row).find(\'select\').chosen();
	})
';
$doc->addScriptDeclaration($js);

So newly added rows now are "chosen" now http://static.xscreenshot.com/2016/10/29/18/screen_8f7dc7709899bac7a43926828e504519

Voir également