T3SEO

TYPO3 and SEO since 2011

Eigene Inhaltselemente konfigurieren I

Die in TYPO3 existierenden Inhaltselemente wie "Text und Bilder" oder "Dateilinks" sind alle im sogenannten TCA (Table Configuration Array) definiert. Durch die Manipulation dieses Arrays lassen sich bestehende Inhaltselemente verändern und sogar Neue hinzufügen - ganz ohne TemplaVoilà.

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.

Eigene Inhaltselemente konfigurieren I