FlexForm syntax

Note

This section is still messy, should be merged with the section from Core API and Flexforms and should be much easier to understand.

FlexForms create a form-in-a-form. The content coming from this form is still stored in the associated database field - but as an XML structure, stored by \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array().

The “TCA” information needed to generate the FlexForm fields are found inside a <T3DataStructure> XML document. When you configure a FlexForm field in a Data Structure (DS) you can use basically all column types documented here for TCA. The limitations are:

  • “unique” and “uniqueInPid” evaluation is not available
  • You cannot nest FlexForm configurations inside of FlexForms.
  • You cannot add, change or remove fields in FlexForms without copying the data structure and changing the configuration accordingly.
  • Charset follows that of the current backend UTF-8. When storing FlexForm information in external files, make sure that they are using UTF-8 too.
  • type='inline' and other type’s that point to different tables are not allowed in flex form section containers.

For FlexForms the DS is extended with a tag, “<TCEforms>” which define all settings specific to the FlexForms usage. Also a few meta tag features are used.

The tables below documents the extension elements:

Array Elements

<meta>

Element
<meta> Can contain application specific meta settings. For FlexForms this means a definition of how languages are handled in the form.

<[application tag]>

Element
<TCEforms> A direct reflection of a [‘columns’][‘field name’][‘config’] PHP array configuring a field in TCA. As XML, this is expressed by array2xml()’s output.

<ROOT><TCEforms>

Element
<ROOT><TCEforms> For <ROOT> elements in the DS you can add application specific information about the sheet that the <ROOT> element represents.
Child elements

<sheetTitle>

<sheetDescription>

<sheetShortDescr>

Value Elements

<sheetTitle>

Element
<sheetTitle>
Format
string or LLL reference Specifies the title of the sheet.

<sheetDescription>

Element
<sheetDescription>
Format
string or LLL reference Specifies a description for the sheet shown in the flexform.

<sheetShortDescr>

Element
<sheetShortDescr>
Format
string or LLL reference Specifies a short description of the sheet used in the tab-menu.

Sheets and FlexForms

FlexForms always resolve sheet definitions in a Data Structure. If only one sheet is defined that must be the “sDEF” sheet (default). In that case no tab-menu for sheets will appear (see examples below).

FlexForm data format, <T3FlexForms>

When saving FlexForm elements the content is stored as XML using \TYPO3\CMS\Core\Utility\GeneralUtility::array2xml() to convert the internal PHP array to XML format. The structure is as follows:

<T3FlexForms>

Element

<T3FlexForms> Document tag

Child elements

<meta>

<data>

<meta>

Element
<meta> Meta data for the content. For instance information about which sheet is active etc.

<data>

Element

<data> Contains the data: sheets, language sections, field and values

Child elements
<sheet>

<sheets>

Element

<sheets> Contains the data for each sheet in the form. If there are no sheets, the default sheet “<sDEF>” is always used.

Child elements

<sDEF>

<s_[sheet keys]>

<sDEF>

Element

<sDEF> For each sheet it contains elements for each language. only the <lDEF> tag is used.

Child elements
<lDEF>

<lDEF>

Element

<lDEF> For each language the fields in the form will be available on this level.

Child elements
<[field name]>

<[field name]>

Element
<[field name]> For each field name there is at least one element with the value, <vDEF>.
Child elements
<vDEF>

<vDEF>

Element
<vDEF>
Format
string Content of the field in default or localized versions.