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 Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

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

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

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

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