von Alexander Ebner und Patrick Lobacher, 01.03.2009

Inside TYPO3 – Teil 4 – Das Table Configuration Array und Flexforms: Ein Blick in das Innere des CMS

Aus dem
t3n Magazin Nr. 16

Jetzt kaufen

Bei eigenen Extensions ist das TCA sehr hilfreich.

Bei eigenen Extensions ist das TCA sehr hilfreich.

Mit dieser Methode stößt man allerdings bald auf eine Schwachstelle. Nehmen wir einmal an, man möchte die Tabelle „tt_content“ erweitern, in der die Inhalte vorliegen. Das kann man erreichen, indem man ein neues Feld und die entsprechende TCA-Definition hinzufügt. Dieses Vorgehen mag zwar für zwei bis drei Extensions funktionieren, spätestens wenn man mehr Erweiterungen benötigt, sollte man dies auf eine andere Art regeln – schon damit die bestehende Tabelle nicht unnötig aufgebläht wird.

Flexforms

Eine Flexform ist im Grunde nichts anderes als eine etwas anders notierte TCA-Definition. Man definiert dabei in der Tabelle ein Feld vom Typ „flex“ und legt in dieses eine Flexform – ein XML-Dokument, das selbst wiederum ein komplexes Formular mit zahlreichen Feldern und sogar einzelnen Eingabeseiten (Sheets) definieren kann. Hauptanwendungsgebiet für Flexforms ist die Konfiguration von Plugins.

Die Konfiguration (alleine bei tt_news wären es 30 Optionen) wird nicht in der Tabelle „tt_content“ gespeichert, sondern im Feld „pi_flexform“. Genauer gesagt wird die Flexform selbst im Filesystem gespeichert (diese wird zum rendern der Backendformulare verwendet) und die in die Flexform eingegebenen Werte im Feld „pi_flexform“. Die für tt_news verwendete Flexform befindet sich in der Datei „typo3conf/ext/tt_news/flexform_ds.xml“ und sieht beispielsweise wie folgt aus:

XML

<T3DataStructure>
[...]
<sheets>
	<sDEF>
		<ROOT>
			<TCEforms>
				<sheetTitle>LLL:EXT:tt_news/locallang_tca.xml:tt_news.pi_flexform.sheet_general</sheetTitle>    
			<TCEforms>     
			<type>array</type>
			<el>
				<what_to_display>
					<TCEforms>  
						<label>LLL:EXT:tt_news/locallang_tca.xml:tt_news.pi_flexform.what_to_display</label>
						<config> 
							<type>select</type> 
							<items type="array"> 
							<numIndex index="0" type="array"> 
								<numIndex index="0">LIST</numIndex> 
								<numIndex index="1">LIST</numIndex> 
							</numIndex> 
							<numIndex index="1" type="array"> 
								<numIndex index="0">LATEST</numIndex> 
								<numIndex index="1">LATEST</numIndex> 
							</numIndex> 
[...]    
						</config>  
					</TCEforms> 
				</what_to_display> 
[...]   
			</el>  
		</ROOT> 
	</sDEF>
[...]  
</sheets>
</T3DataStructure>

Listing 1

In Listing 1 finden sich einige alte Bekannte: Das Feld, das im obigen Abschnitt definiert wird, hat den Namen „what_to_display“ und gibt den Modus an, in dem das Plugin laufen soll – also „LIST“, „LATEST“, „SINGLE“, „AMENU“ etc.

Seite:  1 2 3 4 5

Empfohlene Artikel