Sichtbarkeit von Eingabefeldern im TYPO3-Backend steuern
Es wäre nicht TYPO3 wenn nicht auch Eingabeformulare im Backend flexibel gestaltbar sind. Dabei lassen sich sowohl in normale TCA-Formulare als auch in Flexform-Formularen einzelne Eingabefelder in Abhängigkeit von Werten in anderen Feldern ein- bzw. ausblenden.
TCA
Um Felder abhängig von der Auswahl eines anderen Feldes ein- bzw. auszublenden müssen in 2 Dateien Änderungen vorgenommen werden.
ext_tables.php
Ergänzen Sie im Konfigurations-Array der Tabelle die Eigenschaft 'requestUpdate' => 'hidecontent'. Dadurch veranlassen Sie das Backend zum Neuladen, sobald der Wert in einem Trigger-Feld geändert wird. Keine Sorge alle bis dahin vorgenommenen Änderungen werden beim Neuladen automatisch gespeichert.
$TCA['tx_sample'] = array (
'ctrl' => array (
'title' => 'LLL:EXT:sample/locallang_db.xml:tx_sample',
'label' => 'title',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'sortby' => 'sorting',
'delete' => 'deleted',
'enablecolumns' => array (
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
'fe_group' => 'fe_group',
),
'requestUpdate' => 'hidecontent',
'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php',
'iconfile' => t3lib_extMgm::extRelPath($_EXTKEY).'icon_tx_sample.gif',
),
);
tca.php
In der Feldkonfiguration, zu finden in der Datei tca.php, der Tabelle können Sie nun bei jenen Feldern die ein- bzw. ausgeblendet werden sollen Bedingungen setzen. Dazu müssen Sie das Attribut displayCond hinzufügen. Die Syntax der Bedingungen lautet dabei wie folgt: FIELD:<Feldname des Triggerfelds>:<Vergleichsoperator>:<Wert>. Für das untere Beispiel lautet die Bedingung daher: blende das Feld teaser ein sobald das Feld hidecontent (in diesem Fall eine Checkbox) den Wert 0 hat (also nicht angehackt ist).
'teaser' => array (
'exclude' => 0,
'label' => 'LLL:EXT:sample/locallang_db.xml:tx_sample.teaser',
'displayCond' => 'FIELD:hidecontent:=:0',
'config' => array (
'type' => 'text',
'cols' => '30',
'rows' => '5',
)
),
Flexform
Auch in Flexform-Formularen lassen sich Bedingungen setzen. Dabei wird dem Trigger-Feld die XML-Entität <onChange>reload</onChange> hinzugefügt und dem ein- bzw. auszublendetem Feld die XML-Entität <displayCond>FIELD:<Feldname>:<Operator>:<Wert></displayCond>.
<mode>
<TCEforms>
<label>LLL:EXT:sample/locallang_flexform.xml:sample.mode</label>
<onChange>reload</onChange>
<config>
<type>select</type>
<size>1</size>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">LLL:EXT:sample/locallang_flexform.xml:sample.mode.1</numIndex>
<numIndex index="1">mode1</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">LLL:EXT:sample/locallang_flexform.xml:sample.mode.2</numIndex>
<numIndex index="1">mode2</numIndex>
</numIndex>
</items>
<minitems>1</minitems>
</config>
</TCEforms>
</mode>
<autostart>
<TCEforms>
<label>LLL:EXT:sample/locallang_flexform.xml:sample.autostart</label>
<displayCond>FIELD:mode:=:mode1</displayCond>
<config>
<type>check</type>
</config>
</TCEforms>
</autostart>
<linktext>
<TCEforms>
<label>LLL:EXT:sample/locallang_flexform.xml:sample.link</label>
<displayCond>FIELD:mode:!=:mode2</displayCond>
<config>
<type>input</type>
<size>25</size>
</config>
</TCEforms>
</linktext>
Guter Blog, danke!
Lässt sich die displayCond im tca.php auch per typoscript setzen?