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)
	)
);

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;

Datei-Felder im Backend konfigurieren

In einem älteren Beitrag habe ich bereits erklärt, wie man die Datei-Felder im RTE konfigurieren kann, um ggf. den direkten Upload zu verbieten oder zu erlauben. Hier soll es darum gehen, wie man das Verhalten von allgemeinen Datei-Feldern im Backend steuern kann. Das betrifft sowohl Content-Elemente als auch Listen-Elemente.

Direkten Upload deaktivieren

Grundsätzlich kann jeder User selbst entscheiden, ob er direkte Uploads für Datei-Felder haben möchte oder nicht. Dazu gibt es in „Benutzerwerkzeuge > Einstellungen > Bearbeiten und erweiterte Funktionen“ die Einstellung „Hochladen von Dateien direkt im Web-Modul„. Voraussetzung hierfür ist nur, dass der Backend-Benutzer die entsprechenden Rechte hat, um das „Einstellungen„-Modul zu sehen. Die hier vorgenommene Einstellung betrifft für den jeweiligen Benutzer alle Datei-Felder im Backend.

Darüber hinaus kann die Einstellung dieses Feldes auch vom Administrator vorgegeben werden, so dass der Backend-Benutzer nicht mehr selbst darüber entscheiden darf ob er das Upload-Feld nutzen möchte oder nicht. Einstellbar ist folgende Option via „User TSconfig“:

# disable direct upload
setup.override.edit_docModuleUpload = 0

# enable direct upload
setup.override.edit_docModuleUpload = 1

Selbstverständlich kann der Wert im TSconfig einzelner Benutzer, einzelner Gruppen oder auch global gesetzt werden.


Upload aktiviert


Upload deaktiviert

Fileadmin-Browser deaktivieren

Auch die Möglichkeit, den Fileadmin zu durchstöbern kann deaktiviert werden. Allerdings geschieht das hier nicht auf der Benutzerebene, sondern pro Feld für alle Benutzer. Die Einstellung hierzu kann über das $TCA vorgenommen werden.

$GLOBALS['TCA']['tx_z7zerosevenhead_item']['columns']['image']['config']['disable_controls'] = 'browser';


deaktivierter Fileadmin-Browser

„Vorhandene Dateien“-Liste deaktivieren

Ebenso wie der Fileadmin-Browser lässt sich auch die Liste der vorhandenen Dateien entfernen. Der Nachteil dabei ist allerdings, dass dann auch gepflegte Bilder nicht mehr entfernt werden können. Aber evtl. hat ja sogar das in manchen Anwendungsszenarien seinen Sinn.

$GLOBALS['TCA']['tx_z7zerosevenhead_item']['columns']['image']['config']['disable_controls'] = 'list';


deaktivierte Liste

Mehrere Kontroll-Elemente ausblenden

Grundsätzlich kann disable_controls als kommaseparierte Liste gepflegt werden. Da jedoch die Option list auch gleichzeitig den Fileadmin-Browser deaktiviert, macht das evtl. wenig Sinn. Soviel also nur noch als allgemeine Anmerkung der Vollständigkeit halber.

$GLOBALS['TCA']['tx_z7zerosevenhead_item']['columns']['image']['config']['disable_controls'] = 'list,browser';

Integer-Feld durch Selectbox ersetzen

TYPO3 bietet im Backend einige Felder als normale Integerfelder an, in die nahezu beliebige Werte eingetragen werden können. Zwar gibt es die Möglichkeit über das $TCA den Wertebereich zu beschränken. Allerdings sind dann in diesem Wertebereich noch immer alle Eingaben möglich. Was ist jedoch, wenn man z.B. einem Redakteur für eine Bildbreite nur eine Hand voll unterschiedlicher Werte geben will?

Stellen wir uns vor, Sie haben für ein Webseiten-Layout mühsam ein Raster ausgearbeitet, in das sich auch die Bilder der Content-Elemente „Bilder“ oder „Text mit Bild“ einfügen sollen. Auf der anderne Seite haben Sie einen oder mehrere Backend-Redakteure, die mit möglichst wenig Know-How die Inhalte der Webseite pflegen sollen. Eine Lösung wäre hier, den Wert des Feldes „Bildbreite“ standardmäßig auf einen zum Raster passenden Wert zu setzen und das Feld für die Backend-Redakteure komplett auszublenden. Was tun Sie dann aber, wenn in einem Fall ein Diagramm über die ganze Breite des Inhalts eingeblendet werden soll und in einem anderen Fall ein Porträt einer Person schmal neben dem Text stehen soll? In unserem aktuellen Szenario müsste ein Backend-Benutzer mit weiterführenden Rechten, wie z.B. ein Administrator die Bildbreite anpassen.

Dabei kann die Lösung so komfortabel sein. TYPO3 erlaubt es, die Konfiguration der Felder so zu ändern, dass aus einem Integer-Feld mit freier Werteeingabe eine Selectbox wird. Darin können Sie als Administrator dann jeden Wert explizit erlauben und mit einem kurzen erklärenden Text versehen. Im Beispiel des Feldes „Bildbreite“ der Content-Elemente könnte eine Konfiguration in etwa so aussehen:

t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['columns']['imagewidth']['config'] = array(
    'type' => 'select',
    'items' => array(
        array(
            'Left column, full width (550px)',
            '550',
        ),
        array(
            'Right column, full width (256px)',
            '256',
        ),
        array(
            'Right column, small width (92px)',
            '92',
        ),
    ),
);

TYPO3: Angefügter Standardtext beim kopieren oder übersetzen

Wer viel mit TYPO3 arbeitet, dem ist bestimmt schon aufgefallen, dass beim kopieren von Content-Elementen hinter die Überschrift der Anhang „(Kopie X)“ angehängt wird. Oder dass beim übersetzen von Elementen „[Translate to XY:]“ vorangestellt wird. Wem das so nicht passt, oder wer dieses Feature für seine Extension auch benutzen will, der kann das beliebig ändern.

Im aktuellen Beispiel wollen wir das Verhalten für normale Content-Elemente, also Datensätze der Tabelle „tt_content“ ändern. Um nicht in den Source eingreifen zu müssen und damit die Anpassung auch nach einem Upgrade noch verfügbar ist, empfiehlt es sich, die Änderungen ganz einfach in der Datei „typo3conf/extTables.php“ vorzunehmen.

Angehängtes „(Kopie X)“ abändern

Um das angehängte „(Kopie X)“ zu deaktivieren, fügen wir folgende Zeile in die Datei ein:

$TCA['tt_content']['ctrl']['prependAtCopy'] = '';

Wir können jedoch auch völlig eigene Texte vorgeben, wobei %s jeweils durch die automatische Nummerierung ersetzt wird:

$TCA['tt_content']['ctrl']['prependAtCopy'] = '(die %s. Kopie)';

Um ggf. eine Extension zu erweitern, die noch nicht über dieses Feature verfügt, kann folgende Zeile verwendet werden:

$TCA['<tablename>']['ctrl']['prependAtCopy'] = 'LLL:EXT:lang/locallang_general.xml:LGL.prependAtCopy';

Hinter diesem Zeichenungetüm verbirgt sich die von TYPO3 standardmäßig verwendete Zeichenkette, die sich je nach Sprache noch unterscheidet.

Vorangestelltes „[Translate to XY:]“ abändern

Die Konfigurierungsmöglichkeiten sind hier nicht so vielfältig es gibt nur die Möglichkeit, dies ein- oder auszuschalten.

// einschalten
$TCA['<tablename>']['columns']['<field>']['l10n_mode'] = 'prefixLangTitle';
// ausschalten
$TCA['<tablename>']['columns']['<field>']['l10n_mode'] = '';

Allerdings kann dieses Feature für jedes einzelne Feld aktiviert bzw. deaktiviert werden. Um z.B. Überschriften von Content-Elementen künftig nicht mehr damit zu versehen, fügen wir folgende Zeile in die Datei „typo3conf/extTables.php“ ein:

$TCA['tt_content']['columns']['header']['l10n_mode'] = '';