Wer eigene Extensions in TYPO3 programmiert, kennt das Problem: Man erstellt eigene Datenbanktabellen, die über das Backend befüllt werden können. Dort kann man diese Einträge dann über die Listenansicht bewundern bzw. ändern. Ein Label gibt Auskunft über den jeweiligen Datensatz. Was aber, wenn der Label aus mehreren Einträgen bestehen soll?

Lösung 1: label_alt

Die einfache Lösung bis Typo 4.0 ist folgende: Man ergänzt die Daten ext_tables.php um zwei Zusätzliche Einträge für die TCA:

Die Ausgabe wäre dann “ersterlabel, zweiterlabel, dritterlabel”.

Praktisch ist natürlich dann auch, wenn man den Eintrag default_sortby entsprechend ebenfalls sortieren lässt:

Lösung 2: label_userFunc

Was aber nun, wenn die Label in einer anderen Tabelle stehen oder aus einem Dropdown kommen sollen, das ja nur Int-Werte enthält? Seit TYPO3 -Version 4.1 steht dafür eine Funktionalität bereit. Ich werde den zweiten Fall (Dropdown) beschreiben, die Abfrage einer anderen Tabelle ist recht ähnlich, vielleicht sogar einfacher.

Folgende Annahmen werden getroffen:

  • Ich habe ein Dropdown/eine Checkbox o.ä. über den Kickstarter eingerichtet.
  • Die Labels des Dropdowns, o.ä. stehen damit in locallang_db.xml.

So, als erstes müssen wir eine Erweiterungsfunktion bereit stellen, die die Ausgabe dann übernimmt. Dazu erweitern wir ext_tables.php um folgende Zeilen:

Wichtig hier, dass der Klasse user_ vorangestellt wird – ansonsten ignoriert Typo3 den Methodenaufruf!

So, nun benötigen wir noch die Klasse. Dazu legen wir eine Datei class.userLabelClass.php im selben Verzeichnis wie ext_tables.php an:

Folgende Werte müssen noch ersetzt werden:

  • [ERSTERLABEL] steht für den ersten Label, z.B. Titel, Jahr, etc.
  • [TABELLENAME] ist der Tabellenname.
  • [EXTKEY] ist der Extension Key, den man angegeben hat, also z.B. user_myext.
  • [XMLFRAGMENT] ist der Teil der Dropdown-Einträge in der Datei locallang_db.xml ohne Nummer. Wenn die Einträge also user_myext.dropdown.I.0,1,2… heißen, dann ist dieser Eintrag “user_myext.dropdown.I.”.
  • [DROPDOWNWERT] ist der Spaltenname des Wertes in der Datenbanktabelle.

Damit sollte dann alles klappen!