Subformulier formulierveld type

From Joomla! Documentation

This page is a translated version of the page Subform form field type and the translation is 84% complete.
Other languages:
Bahasa Indonesia • ‎English • ‎Nederlands • ‎Türkçe • ‎español • ‎français • ‎العربية

Het subformulier formulierveld type biedt de mogelijkheid om XML formulieren binnen andere XML formulieren te gebruiken en deze in bestaande formulieren te hergebruiken. Als de optie meerdere is ingesteld op waar dan is het opgenomen formulier herhalend.

Het veld heeft twee voor gedefinieerde lay-outs voor het tonen van het subformulier als tabel of als div container. Daarnaast ondersteund het ook eigen lay-outs.

Een voorbeeld XML veld definitie voor enkele modus:

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

Een voorbeeld XML veld definitie voor meerdere modus:

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

Voorbeeld XML voor voorbeeldformulier.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>

Een voorbeeld XML voor voorbeeldformulier.xml met 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>

Het XML subformulier kan ook inline gespecificeerd worden als een alternatief voor het plaatsen van het XML subformulier in een apart bestand. Het volgende voorbeeld laat dit zien:

<?xml version="1.0" encoding="UTF-8"?>
<field
	name="field-name"
	type="subform"
	label="Subform Field"
	description="Subform Field Description"
	multiple="true"
	min="1"
	max="10"
	>
	<form>
		<field
			name="example_text"
			type="text"
			label="Example Text"
			/>
		<field
			name="example_textarea"
			type="textarea"
			label="Example Textarea"
			cols="40"
			rows="8"
			/>
	</form>
</field>

Veld eigenschappen:

  • type (verplicht) moet subformulier zijn.
  • name (verplicht) is de unieke naam van het veld.
  • label (verplicht) (vertaalbaar) is de beschrijvende titel van het veld.
  • description (optioneel) (vertaalbaar) is tekst die getoond wordt als tooltip als de gebruiker de muis beweegt over de drop-down box.
  • required (optioneel) Het veld moet ingevuld zijn voor het verzenden van het formulier.
  • message (optioneel) De foutboodschap die getoond wordt in plaats van de standaard foutboodschap.
  • default (optioneel) is de standaard waarde, JSON string.
  • formsource (verplicht) de bron van het formulier dat opgenomen moet worden. Een relatief pad naar het xml bestand (relatief aan de root map waarin Joomla is geïnstalleerd) of een valide formuliernaam die gevonden kan worden via JForm::getInstance().
  • multiple (optioneel) of het subformulier herhaald moet kunnen worden of niet.
  • min (optioneel) aantal minimale herhalingen in multiple modus. Standaard : 0.
  • max (optioneel) maximaal aantal herhalingen in multiple modus. Standaard: 1000.
  • groupByFieldset (optioneel) of de subformulier velden gegroepeerd moeten worden in hun fieldset (true or false). Standaard: false.
  • buttons (optioneel) welke knoppen getoond moeten worden in multiple modus. Standaard: add,remove,move.
  • layout (optioneel) de naam van de lay-out die gebruikt wordt bij het weergeven van de subformulier velden.
  • validate (optioneel) zou ingesteld moeten worden op SubForm (let op dat dit hoofdlettergevoelig is!) om er zeker van te zijn dat de velden in het subformulier individueel gevalideerd worden. Standaard: velden in het subformulier worden niet gevalideerd, ook al zijn de validatie regels ingesteld.

Beschikbare lay-outs:

  • joomla.form.field.subform.default geeft het subformulier weer in een div container, zonder ondersteuning voor herhaling. Standaard voor enkele modus.
  • joomla.form.field.subform.repeatable geeft het subformulier weer in een div container, gebruikt voor multiple modus. Ondersteund groupByFieldset.
  • joomla.form.field.subform.repeatable-table geeft het subformulier weer als tabel, gebruikt in multiple modus. Ondersteund groupByFieldset. Standaard wordt ieder veld weergegeven als een kolom in de tabel, maar als groupByFieldset=true dan wordt iedere fieldset weergegeven als een kolom in de tabel.

Let op

Als uw veld in het subformulier aanvullende JavaScipt logica bevat kan kan het zijn dat dit niet werkt in multiple modus. Dit komt door dat de velden niet gezien worden die door het subformulier dynamisch toegevoegd worden. Als dit gebeurd moet u uw velden aanpassen zodat zij dit ondersteunen. Het volgende voorbeeld kan helpen:

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 ...
    })
});

Hierdoor kan het zijn dat enkele extra Joomla! velden niet werken voor nu.

Validatie van velden en filters

Het subformulier formulierveld biedt geen validatie en filters voor onderliggende velden.

Addition: Since a security fix in Joomla 3.9.7 the filter="example" attributes in subform child fields are supported and the fields will be validated; but NOT in custom form fields that extend the JFormFieldSubform class. You have to adapt such custom fields yourself!

Beware!

All extensions that use subform fields MUST add an attribute filter to their subform child fields of type editor, textarea, text (maybe others, too) since Joomla 3.9.7 like it's common for "normal" JForm fields, if you want to allow HTML input. Otherwise the validation falls back to STRING, which is the common behavior for "normal" JForm fields. Examples:

filter="safehtml"
filter="JComponentHelper::filterText"
filter="raw" (bad decision in most cases)

Voorbeeld

Het probleem:

After adding new rows selects are not "chosen".

Oplossing:

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

Problem

Subform data not getting stored to database on custom component.

Solution

Add the following line to the beginning of your corresponding table class:

protected $_jsonEncode = array('fieldnamehere');

More information Here.

See also