Zum Inhalt springen

Die neuen Möglichkeiten von DisplayCond

Einleitung

Seit vielen Jahren gibt es die Möglichkeit, ausgewählte Felder nur für einen bestimmten Kontext anzeigen zu lassen.

So konnte der Extensionentwickler zum Beispiel vorgeben, Feld X nur dann anzeigen zu lassen, wenn Feld Y einen zuvor vorgegebenen Wert enthält. Von dieser Möglichkeit macht auch TYPO3 selbst Gebrauch und zwar im Bereich der Inhaltselemente. Wenn Sie als Inhaltstyp "Text" auswählen, werden Ihnen völlig andere Felder zur Bearbeitung angezeigt als zum Beispiel beim Typ "Bilder" oder "Formular".

Dieses Aktivieren/Deaktivieren von Feldern kann der Extensionentwickler über die Eigenschaft "displayCond" innerhalb der TCA steuern. Jedoch mit einer Beschränkung: pro Feld kann immer nur EINE Bedingung angegeben werden. Zwar kann man abfragen, ob ein Feld den Wert x, y oder z aufweist, aber es gibt keine Möglichkeit abzufragen, ob die Extension x installiert ist UND dass ein anderes Feld einen bestimmten vorgegebenen Wert aufweist.

Hier ein Ausschnitt, was bisher möglich ist:

Einfaches Beispiel

'street' => array(
  'displayCond' => 'EXT:test123:LOADED:FALSE',
  'label' => 'Straße',
  'config' => array(
    'type' => 'input',
    'size' => 30
  ),
),

 

Ab TYPO3 6.1

Die Core-Entwickler haben im Bereich dieser displayCond enorm aufgeräumt und die Möglichkeit mehrere Bedingungen anzugeben eingebaut. So wird nun innerhalb des Quellcodes abgefragt, ob es sich bei dem Wert für displayCond um einen String handelt, dann ist wie im oberen Beispiel nur eine Bedingung möglich, oder um ein Array, dann steht die geballte Ladung von mehreren und auch verschachtelten Bedingungen zur Verfügung. Hier nun ein paar Beispiele:

AND-Bedingung

'street' => array(
  'displayCond' => array(
    'AND' => array(
      'EXT:test123:LOADED:FALSE',
      'FIELD:title:REQ:TRUE',
    ),
  ),
  'label' => 'Straße',
  'config' => array(
    'type' => 'input',
    'size' => 30
  ),
),

 

Das Feld street wird nur dann angezeigt wenn die Extension test123 nicht geladen ist und das Feld title einen Wert aufweist.

OR-Bedingung

'street' => array(
  'displayCond' => array(
    'OR' => array(
      'EXT:test123:LOADED:TRUE',
      'FIELD:amount:<:10',
    ),
  ),
  'label' => 'Straße',
  'config' => array(
    'type' => 'input',
    'size' => 30
  ),
),

 

Das Feld street wird nur dann angezeigt wenn entweder die Extension test123 geladen ist ODER das Feld amount einen Wert kleiner 10 aufweist.

Verschachtelte Bedingungen

'street' => array(
  'displayCond' => array(
    'AND' => array(
      'EXT:test123:LOADED:TRUE',
      'OR' => array(
        'FIELD:amount:<:10',
        'FIELD:excludes:>:5',
      ),
    ),
  ),
  'label' => 'Straße',
  'config' => array(
    'type' => 'input',
    'size' => 30
  ),
),

 

displayCond in FlexForms

<feld1>
  <TCEforms>
    <label>Feld 1</label>
    <config>
      <type>input</type>
      <size>30</size>
    </config>
  </TCEforms>
</feld1>

<feld2>
  <TCEforms>
    <label>Feld 2</label>
    <config>
      <type>input</type>
      <size>30</size>
    </config>
  </TCEforms>
</feld2>

<cond>
  <TCEforms>
    <label>Teste Bedingung</label>
    <displayCond>
      <AND>
        <numIndex index="0">FIELD:feld1:REQ:TRUE</numIndex>
        <numIndex index="1">FIELD:feld2:REQ:TRUE</numIndex>
        <OR>
          <numIndex index="0"><![CDATA[FIELD:feld1:<:12]]></numIndex>
          <numIndex index="1">FIELD:feld2:>:20</numIndex>
        </OR>
      </AND>
    </displayCond>
    <config>
      <type>input</type>
      <size>30</size>
    </config>
  </TCEforms>
</cond>

 

Aktualisiert: 04.05.2023