TypoScript von TemplaVoila auslagern
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.
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:
<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").
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:
<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.