Eigene Inhaltselemente konfigurieren I
TCA-Überblick
Um das TCA und seine endlosen Optionen einigermaßen zu verstehen, hilft es natürlich die Dokumentation griffbereit zu haben. Aber um ein Gefühl für die praktische Anwendung zu bekommen ist ein Blick in die bei TYPO3 mitgelieferte Konfiguration Gold wert.
Unter Adminwerkzeuge > Konfiguration lässt sich oben im Dropdown TCA auswählen. Hier sind alle in TYPO3 registrierten Datenbanktabellen, deren Felder und Backendkonfiguration aufgelistet.
Ein neues Inhaltselement
Der Typ eines Inhaltselements wird im Feld CType angegeben. Ein Blick in $TCA['tt_content']['columns']['CType']['config']['items'] zeigt die bereits existierenden Typen. An dieser Stelle werden wir jetzt ein neues Element einfügen.
Um das TCA zu manipulieren nutzt man meistens Extensions. Im ersten Schritt werden wir aber darauf verzichten und eine simplere Methode benutzen: das extTables.php Script.
Wenn noch nicht vorhanden, wird dafür in der localconf.php die folgende Zeile eingetragen
$typo_db_extTableDef_script = 'extTables.php';
und die Datei typo3conf/extTables.php angelegt. Dort tragen wir ein:
<?php t3lib_div::loadTCA('tt_content'); $TCA['tt_content']['columns']['CType']['config']['items'][] = array('Textbox', 'textbox'); $TCA['tt_content']['types']['textbox'] = array( 'showitem' => '--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.general;general,header,bodytext' ); ?>
Zeile 2 stellt sicher, dass die Konfiguration für tt_content schon vollständig geladen ist. Das ist nicht unbedingt immer der Fall und deshalb sollte diese Funktion generell in jedem Script aufgerufen werden, das am TCA etwas ändern soll.
Zeile 3 fügt eine neue Option in das Selectfeld von CType ein. Das übergebene Array enthält als ersten Wert den Klartextnamen, der im Backend dargestellt wird (hier einfallsreich: "Textbox") und lässt sich natürlich auch mit der "LLL:"-Syntax lokalisieren. Der zweite Wert ist der interne Wert, der in der Datenbank gepeichert wird (hier "textbox").
In Zeile 4 und 5 wird definiert welche Felder das neue Inhaltselement haben soll. Hier habe ich zunächst die Palette general ausgewählt, die Felder enthält die immer vorhanden sein sollten (CType, colPos, sys_language) und anschließend die Felder header und bodytext, die wir für unser neues Inhaltselement benutzen wollen.
Das genügt schon um das neue Inhaltselement im Backend zu rendern.
Das Frontend-Rendering
Damit das neue Inhaltselement auch gerendert werden kann muss es auch im TypoScript definiert sein.
tt_content.textbox = COA tt_content.textbox { wrap = <div class="textbox">|</div> 10 = TEXT 10.field = header 10.wrap = <h2>|</h2> 20 = TEXT 20.field = bodytext 20.wrap = <p>|</p> }
Bewirft man dieses Markup noch mit etwas CSS und Javascript könnte es z.B. so aussehen:
Ich bin die Überschrift
Ich bin der Text!
Und ich bin der Text..
Und weiter?
Wir haben in diesem Beispiel keine Extension benötigt, weil wir mit den in TYPO3 bereits vorhandenen Datenbankfeldern gearbeitet haben. Häufig möchte man jedoch neue Felder hinzufügen. In einem zweiten Teil dieses Artikels werde ich zeigen, wie das funktioniert.
Bildnachweis: 2010/365/79 Non Power Tools von cogdogblog (CC BY 2.0)