RTE für Extbase-Extensions konfigurieren

Wer sich mit dem RTE in TYPO3 schon einmal genauer auseinander gesetzt hat, der weiß, dass für die interne Speicherung und Verarbeitung von Links nicht der gewöhnliche HTML-Tag <a> verwendet wird. Vielmehr arbeitet der RTE intern mit einem <link>-Tag. Auf den ersten Blick mag das seltsam erscheinen, bei näherer Betrachtung ist das jedoch logisch und konsequent. RTE für Extbase-Extensions konfigurieren weiterlesen

Felder im TYPO3-Backend gruppieren

Mit der TYPO3-Extension Extension Kickstarter lassen sich Extensions incl. der dazu gewünschten Tabellen recht einfach anlegen. Allerdings werden alle Felder nur simpel nacheinander aufgelistet und eine echte Zusammengehörigkeit ist nicht sofort zu erkennen.

Um dem Redakteur zumindest eine kleine Hilfestellung zu geben, könnte man die Feldbeschriftungen anpassen. Dadurch lässt sich zumindest auf den zweiten Blick eine Zusammengehörigkeit erkennen.

Mit ein klein wenig Kenntnis über das „Table Configuration Array“ (TCA) kann man Felder jedoch auch sinnvoll und unverkennbar gruppieren. Wie das geht wird im Folgenden vorgestellt.

Zunächst öffnen wir die vom Extension Kickstarter angelegte Datei tca.php und suchen dort die Konfiguration für die entsprechende Tabelle. Diese sieht in stark vereinfachter Darstellung in etwa so aus:

$TCA['tx_myextension_demo'] = array (
	'types' => array (
		'0' => array('showitem' => 'hidden;;1, name, x, y, isbranch')
	),
	'palettes' => array (
		'1' => array('showitem' => 'starttime, endtime')
	)
);

Im Feld [types][0] sind alle Felder in der Reihenfolge aufgelistet, wie sie im Backend-Formular zu sehen sein werden. Im Feld [palettes][1] ist die zweite Optionspalette definiert, die dem Feld hidden über den Index 1 zugeordnet ist. Genau eine solche Optionspalette wollen wir uns, in angepasster Form, zu Nutzen machen. Zu diesem Zweck verlagern wir die Felder x, y, isbranch in eine eigene Palette.

$TCA['tx_myextension_demo'] = array (
	'types' => array (
		'0' => array('showitem' => 'hidden;;1, name, --palette--;Flash-Weltkarte;worldmap')
	),
	'palettes' => array (
		'1' => array('showitem' => 'starttime, endtime'),
		'worldmap' => array('showitem' => 'x, y, isbranch')
	)
);

Dieser geben wir der Übersichtlichkeit halber keine Zahl als Index, sondern den Namen worldmap. Zusätzlich platzieren wir in der normalen Liste aller Felder ([types][0]) ein neues Feld, das ebenfalls einer kleine Erklärung bedarf: --palette--;Worldmap;worldmap. Diese Konfiguration wird durch Semikolon in drei Bereiche unterteilt:

  • Der erste Wert --palette-- bedeutet, dass das kein reguläres Eingabefeld ist, dessen definition sich ebenfalls im TCA befindet, sondern ein Spezialfeld als Platzhalter für eine Palette.
  • Der dritte Wert worldmap ist der Index für die Palette, wie er auch im Array [palettes] auftaucht.
  • Der Zweite Konfigurations-Wert ist der angezeigte Name der Palette.

Als letzten Feinschliff geben wir der Palette noch ein Attribut canNotCollapse. Das bedeutet, dass sie nicht mit der Option „Zweite Optionspalette anzeigen“ erscheint und verschwindet, sondern immer noch zu sehen ist. Zusätzlich machen wir den Namen Übersetzbar. Das geschieht, indem wir den vorher fest eingetragenen Wert Flash-Weltkarte durch einen Verweis auf die Local-Lang ersetzen. Selbstverständlich muss in der Datei locallang_db.xml dann auch der entsprechende Eintrag vorhanden sein.

$TCA['tx_myextension_demo'] = array (
	'types' => array (
		'0' => array('showitem' => 'hidden;;1, name, --palette--;LLL:EXT:myextension/locallang_db.xml:tx_myextension_demo.worldmap;worldmap')
	),
	'palettes' => array (
		'1' => array('showitem' => 'starttime, endtime'),
		'worldmap' => array('showitem' => 'x, y, isbranch', 'canNotCollapse' => 1)
	)
);

Tipp: 90% aller TYPO3 Fehler beheben

Kennen Sie das nicht? Sie ändern eine Headline oder einen Text in TYPO3 und plötzlich taucht eine Fehlermeldung auf mit der Meldung, das diese durchgeführte Änderung nicht möglich seie. Sprich Ihre Änderung wird auf dem Live-System einfach garnicht erst angezeigt.

Diesem Problem können Sie als TYPO3 User nun aber leicht entgegenwirken, indem Sie ganz einfach in der Administrationsoberfläche von TYPO3 oben auf das Blitz TYPO3 Blitzicon in der Menüleiste klicken und anschließend den Punkt “ Alle Caches löschen“ auswählen.

Mit diesem Tipp, können Sie in der Regel rund 90% aller TYPO3 Fehler beheben.

TYPO3-Tabellen nur auf der root-Ebene

In TYPO3 ist in der Regel jeder Datensatz einer konkreten Seite zugeordnet. Das hat seinen Sinn, um Ordnung zu schaffen. Allerdings kann es in einigen Fällen auch von Nachteil sein, wenn Datensätze dadurch evtl. schwerer auffindbar sind. Abhilfe kann geschaffen werden, indem eine Tabelle nur noch für die root-Ebene (pid = 0) erlaubt wird.

Das geht ganz einfach mit einem Eintrag in der TCA der entsprechenden Tabelle, z.B. in der Datei typo3conf/extTables.php

$TCA[<tablename>]['ctrl']['rootLevel'] = 1;

Es ist aber dabei zu beachten, dass nur Backend-Benutzer mit Administrator-Rechten auf der root-Ebene arbeiten dürfen.

Tabellen nur für TYPO3-Administratoren

Im TYPO3-Backend lassen sich Tabellen mit einer simplen Zusatzkonfiguration für normale Redakteure sperren. Tabellen sind dann nur noch für Administratoren sichtbar und die Inhalte können auch nur von Administratoren bearbeitet werden.

$TCA[<tablename>]['ctrl']['adminOnly'] = 1;

Read-Only-Felder im TYPO3-Backend

In manchen Fällen ist es wünschenswert, in TYPO3 Tabellenfelder für einen BE-User bzw. Administrator zwar sichtbar zu machen, aber nicht bearbeitbar. Das funktioniert mit einer kleinen Anpassung im Table Configuration Array (TCA) der entsprechenden Tabelle.

$TCA[<tablename>]['columns'][<fieldname>]['config']['readOnly'] = 1;

Das Attribut kann auf die unterschiedlichsten Feldtypen angewendet werden. Hier ist außer einem einzeiligen und einem mehrzeiligen Textfeld sogar ein Datei-Feld auf „readOnly“ gesetzt:

Die Sinnhaftigkeit dieses Vorgehens muss natürlich in jedem Fall individuell geprüft werden. Der oben gezeigte Screenshot zeigt einen Ausschnitt aus einer Extension, die über Fronten-User-Eingaben befüllt wird. Den Backend-Usern ist es dann noch gestattet, zusätzliche Dateien anzuhängen.

Breite von Mehrfach-Auswahlboxen im TYPO3-Backend

Wer regelmäßig mit dem TYPO3-Backend arbeitet, wird auch die Auswahlboxen mit Mehrfachauswahl kennen: Rechts eine Box mit allen verfügbaren Elementen, links eine Box mit allen gewählten Elementen in der festgelegten Reihenfolge. – Eigentlich eine einfache Sache. Doch sobald die Einträge zu lang sind, werden sie automatisch abgeschnitten und lassen sich unter Umständen nicht mehr korrekt voneinander unterscheiden.

Diese Multiple-Selectboxen lassen sich jedoch mit Leichtigkeit anpassen. Dazu reichen wenige Zeilen Code, die am besten in der Datei extTables.php platziert werden. Hier am Beispiel des Feldes include_static_file der Tabelle sys_template:

t3lib_div::loadTCA('sys_template');
$TCA['sys_template']['columns']['include_static_file']['config']['selectedListStyle'] = 'width:400px';
$TCA['sys_template']['columns']['include_static_file']['config']['itemListStyle'] = 'width:400px';

Die Konfigurations-Option selectedListStyle bezieht sich auf die Liste der bereits ausgewählten Elemente, also die linke Box. Während itemListStyle die Liste aller Elemente anspricht, also die rechte Box.

Es können beliebige CSS-Informationen hinterlegt werden. Statt width könnten also ebenso Anweisungen wie min-width oder max-width hinterlegt werden. Auch Anweisungen zu Farben, Schrift etc. können hinterlegt werden. Mehrere Anweisungen lassen sich – wie bei CSS gewohnt – mit Semikolon getrennt angeben.

$TCA['sys_template']['columns']['include_static_file']['config']['itemListStyle'] = 'width:400px;font-style:italic;color:grey';

Auswahl- und Dateifelder im TYPO3-Backend mitwachsen lassen

Eigene Extensions lassen sich schnell mit dem Extension Kickstarter erstellen. Dabei lassen sich die Feldkonfigurationen schnell zusammen klicken und die entsprechende Tabellen-Konfiguration (TCA) wird automatisch erstellt. Allerdings sind über den Kickstarter nicht alle theoretisch verfügbaren Einstellungen auswählbar. Will man z.B. ein automatisch mit der Anzahl der Inhalte mitwachsendes Feld, muss man manuell nachhelfen.

Anpassen eigener Extensions

Ein Ausschnitt der Tabellen-Konfigurations-Datei tca.php, die mit dem Kickstarter erstellt wurde, könnte beispielsweise so aussehen:

$TCA['tx_myextension_table1'] = array (
	'columns' => array (
		'related' => array (
			'exclude' => 1,
			'label' => 'LLL:EXT:z7_ideaskgf/locallang_db.xml:tx_myextension_table1.related',
			'config' => array (
				'type' => 'select',
				'foreign_table' => 'tx_myextension_table2',
				'size' => 5,
				'minitems' => 0,
				'maxitems' => 100,
			)
		),
	)
);

Dabei wurde als Größe im Kickstarter der Wert 5 angegeben und als Anzahl der erlaubten Inhalte der Wert 100. Mit dieser Konfiguration können 100 Elemente ausgewählt werden, die Feldgröße bleibt jedoch bei einer Höhe von fünf Einträgen bestehen. Werden mehr als diese fünf Einträge gewählt, bleibt die Höhe trotzdem fix und die Auswahlbox erhält eine Scrollleiste.

Dieses Verhalten ist natürlich völlig in Ordnung und kann durchaus Sinn machen. In anderen Fällen kann es aber besser sein, die Auswahlbox an die Anzahl der Einträge anzupassen, um somit ohne Scrollleiste sofort alle gewählten Elemente sichtbar zu machen. Das lässt sich mit der Konfigurations-Option autoSizeMax bewerkstelligen. Diese wird in die Konfiguration des Tabellefeldes eingetragen und mit dem gewünschten Wert versehen:

$TCA['tx_myextension_table1'] = array (
	'columns' => array (
		'related' => array (
			'exclude' => 1,
			'label' => 'LLL:EXT:z7_ideaskgf/locallang_db.xml:tx_myextension_table1.related',
			'config' => array (
				'type' => 'select',
				'foreign_table' => 'tx_myextension_table2',
				'size' => 5,
				'minitems' => 0,
				'maxitems' => 100,
				'autoSizeMax' => 100,	// neu eingefügt
			)
		),
	)
);

Der Wert kann zwar beliebig gesetzt werden, er macht allerdings nur Sinn wenn er höher ist, als der bei size gesetzte Wert. Außerdem macht es Sinn, den Wert identisch mit maxitems zu setzen.

Anpassen fremder Extensions

Selbstverständlich kann diese TCA-Einstellung nicht nur auf eigene Extensions angewandt werden. Es ist auch völlig irrelevant, ob eine Extension mit dem Extension Kickstarter erstellt wurde oder nicht. Die autoSizeMax-Option kann für jedes Feld hinterlegt werden.

Dazu müssen folgende einfache Zeilen in die Datei typo3conf/extTables.php eingetragen werden. Tabellen- und Feldname, sowie der autoSizeMax-Wert sind natürlich individuell anzupassen.

t3lib_div::loadTCA('tablename');
$GLOBALS['TCA']['tablename']['columns']['fieldname']['config']['autoSizeMax'] = 20;

Grid View im TYPO3-Backend

Ende Januar wurde TYPO3 Version 4.5 veröffentlicht. Diese neue Version trägt nicht nur erstmals den Titel LTS im Namen, sondern bringt auch einige nette neue Features mit. Eines davon ist „Grid View“ – damit lassen sich die bisherigen Inhaltsspalten im Backend beliebig anordnen, wodurch die Inhaltspflege erheblich vereinfacht wird. Schließlich befinden sich die Content-Elemente im Backend an den gleichen Positionen wie im Frontend.

Diverse Hintergrundinformationen zum neuen Feature findet man in der offiziellen TYPO3-News. Dort sind auch einige Screenshots zu sehen, wie das Feature in der Praxis eingesetzt werden kann.

Grid-View-Komposition anlegen

Die Kompositionen lassen sich kinderleicht anlegen, mann muss nur wissen wo man sie findet:

1. Backend-Modul „Liste“
2. Neuen Datensatz anlegen
3. Typ „Backend-Layout“

Die Konfiguration kann man dann entweder von Hand erzeugen oder den komfortablen Wizzard benutzen, der sich per Klick auf das „Assistent“-Symbol öffnen lässt.

Grid-View einer Seite zuweisen

Die erstellten Grid-View-Einstellungen lassen sich über die Seiteneigenschaften im Reiter „Erscheinungsbild“ zuweisen. Man hat dabei die Möglichkeit, das Grid nur für die aktuelle Seite zu aktivieren, oder für alle Unterseiten.

Flash-Messages in TYPO3-Backend

Seit einiger Zeit ist es möglich, dem BE-User über so genannte „Flash-Messages“ Feedback zu geben. Dieses Feature lässt sich auch kinderleicht in die eigene Extension integrieren.

Quelle: François Suter, http://buzz.typo3.org/

François Suter erklärt hier in seinem Blog-Beitrag auf buzz.typo3.org, wie sich das Feature integrieren lässt. Die Verwendung läuft dabei recht simpel ab:

  1. Eine Message wird als neues Objekt der Klasse t3lib_FlashMessage angelegt.
  2. Die Message wird der Message-Queue hinzugefügt.
  3. Das Anzeigen der Nachricht erledigt TYPO3 ganz von selbst.

In der Realität könnte Schritt 1 und 2 dann so aussehen:

$msg = t3lib_div::makeInstance('t3lib_FlashMessage', 'Message-Text', 'Title', t3lib_FlashMessage::WARNING);
t3lib_FlashMessageQueue::addMessage($msg);

Zur Einstufung der Meldung stehen die Klassen-Konstanten t3lib_FlashMessage::INFO, t3lib_FlashMessage::OK, t3lib_FlashMessage::WARNING und t3lib_FlashMessage::ERROR zur Verfügung.