blog.bartlweb - a technologist's external brain

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>

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

  1. Guter Blog, danke!
    Lässt sich die displayCond im tca.php auch per typoscript setzen?

    kommentieren

  2. Im Artikel ist nicht beschrieben wie man mehrere Felder für requestUpdate registriert. Wie geht das? Mit komma separiert? Als Array?

    kommentieren

    1. Hallo Edd,

      laut einer schnellen Google-Suche durch Komma separiert:

      $TCA['tx_smaple']['ctrl']['requestUpdate'] = 'field1,field2';

      Hast du es schon so probiert?

      lg Christian

      kommentieren

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "2154" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.