TypoScript von TemplaVoila auslagern

Um einen besseren Überblick über TypoScript Code aus TemplaVoila-Datenstrukturen zu bekommen, sollte man diesen in einem externen Template speichern.

Motivation

Die Zentralisierung von Code ist eine wichtige Eigenschaft eines gut strukturierten Systems. Dies gilt bei der Programmierung in PHP ebenso wie bei der Erstellung von TypoScript-Templates.

Um einen besseren Überblick über TypoScript-Code, der in den Datenstrukturen von TemplaVoila benötigt wird zu bekommen, kann man diesen in ein externes Template auslagern.

Negativbeispiel

In der Grafik wird ein beispielhaftes Element in TemplaVoila erstellt. Es trägt den Namen field_content und kann als eine Art Container weitere TYPO3-Inhaltselemente und Flexible Inhaltselemente (FCEs) von TemplaVoila beinhalten. Der Typ des Elements wird mit der Drop Down Box "Voreinstellungen Element" (siehe Markierung) festgelegt.

Definition eines Elements in TemplaVoila
Definition eines Elements in TemplaVoila

Hat man die Grundeinstellungen des Elements vorgenommen und speichert diese ab, so wird von TemplaVoila ein XML-Code erzeugt, der die Datenstruktur des Elements wiedergibt.

Der Abschnitt, der die Definition unseres — sehr einfachen — Elements field_content beschreibt, ist im Folgenden dargestellt:

XML der Datenstruktur (von TemplaVoila erstellt)
<field_content type="array">
	<tx_templavoila type="array">
		<title>Inhalt</title>
		<sample_data type="array">
			<numIndex index="0"></numIndex>
		</sample_data>
		<eType>ce</eType>
		<TypoScript>
	10= RECORDS
	10.source.current=1
	10.tables = tt_content
		</TypoScript>
		<proc type="array">
			<stdWrap></stdWrap>
		</proc>
		<oldStyleColumnNumber type="integer">0</oldStyleColumnNumber>
	</tx_templavoila>
	<TCEforms type="array">
		<label>Inhalt</label>
		<config type="array">
			<type>group</type>
			<internal_type>db</internal_type>
			<allowed>tt_content</allowed>
			<size>5</size>
			<maxitems>200</maxitems>
			<minitems>0</minitems>
			<multiple>1</multiple>
			<show_thumbs>1</show_thumbs>
		</config>
	</TCEforms>
</field_content>

In den Zeilen 9 bis 11 wurde der TypoScript-Code generiert, der zur Darstellung der Inhaltselemente notwendig ist, die später einmal in diesem Element enthalten sein sollen. Dieser Code kann erweitert werden, wenn besondere Formatierungen oder eine gänzlich andere Darstellung gewünscht ist.

Stellen wir uns nun vor, dass es eine ganze Reihe an Seiten-Templates und FCEs in unserer TemplaVoila-basierten Website gibt: Das kann sehr schnell unübersichtlich werden, da sich der TypoScript-Code auf viele XML-Datenstrukturen verteilt.

Best Practice

Eine saubere und bessere Lösung dieses Problems ist, sämtlichen TypoScript-Code aus den XML-Datenstrukturen von TemplaVoila herauszunehmen und in ein oder mehrere externe TypoScript-Templates auszulagern. Der ausgelagerte Code wird dann über eine einzige Zuweisung in die jeweilige Datenstruktur eingefügt.

Die Vorteile der Auslagerung liegen auf der Hand:

  • Der Code für alle TemplaVoila-Objekte ist an einer Stelle zusammengefasst und wird damit wesentlich übersichtlicher.
  • Sie können den Code mit Ihrem gewohnten Editor bearbeiten.
  • Die XML-Datenstruktur muss nicht geändert werden, wenn sich der TypoScript-Code verändert.
  • Sie können die Vererbung in TypoScript nutzen.

Erstellen Sie einfach ein TypoScript-Template und tragen Sie dort den Code aus der Datenstruktur (alles zwischen den <TypoScript> Tags) ein. Ersetzen Sie die Zahl 10 durch einen beliebigen Namen für den ausgelagerten Code.

Wir benutzen bei FCEs als Konvention nach lib. immer fce, dann den Namen des Elements (hier: test) und schließlich den Namen des Feldes (hier: content, wegen "field_content").

Ausgelagertes TypoScript des FCE TypoScript, Bereich SETUP
lib.fce_test.content = RECORDS
lib.fce_test.content {
  source.current = 1
  tables = tt_content
  wrap = <div class="fce-test">|</div>
}

# ... weiterer TypoScript Code für TemplaVoila-Elemente ...

Nur zu Demonstrationszwecken haben wir den ursprünglichen Code um einen wrap erweitert. Natürlich sind weitaus komplexere Erweiterungen möglich.

In der XML-Datenstruktur ersetzen Sie anschließend den ausgelagerten Code durch eine einfache Zuweisung:

XML der Datenstruktur mit ersetztem TypoScript
<field_content type="array">
  <tx_templavoila type="array">
    <title>Inhalt</title>
    <sample_data type="array">
      <numIndex index="0"></numIndex>
    </sample_data>
    <eType>ce</eType>
<TypoScript><![CDATA[
10 < lib.fce_test.content
]]></TypoScript>
    <proc type="array">
      <stdWrap></stdWrap>
    </proc>
    <oldStyleColumnNumber type="integer">0</oldStyleColumnNumber>
  </tx_templavoila>
  <TCEforms type="array">
<!-- weitere Definitionen hier weggelassen -->
  </TCEforms>
</field_content>

Diese Vorgehensweise können Sie bei all Ihren Flexiblen Inhaltselementen und Seiten-Templates anwenden, die Sie mit TemplaVoila erstellen. Sie sollten bald merken, welche Erleichterung das Herausnehmen von TypoScript aus den XML-Strukturen mit sich bringt.