8 Kapitel TypoScript TypoScript gehört zu den umfangreichsten und zugleich wichtigsten Bereichen, die ein TYPO3 Integrator beherrschen muss. Nahezu die gesamte Erstellung einer Website, angefangen bei der Konfiguration über Templating bis hin zur Erstellung von Menüs, werden in der Regel mit TypoScript realisiert. Dabei ist es weniger wichtig, Optionen auswendig zu kennen, vielmehr müssen Sie die zugrundeliegenden Konzepte verstanden haben und anwenden können. Im folgenden Kapitel gehen wir detailliert auf die prüfungsrelevanten Aspekte von TypoScript ein, wie Content-Objekte, Menüerstellung, Conditions, spezielle Funktionen wie stdwrap, userfunc und vieles mehr. Der Umfang des Kapitels macht bereits deutlich, welches Gewicht das Thema TypoScript in der Prüfung zum TYPO3 Integrator hat. Allgemeine Informationen zu TypoScript finden Sie in den ersten drei Kapiteln der TSref.¹ 219
8 TypoScript 8.1 Allgemeines Um mit TypoScript effizient zu arbeiten, ist es erforderlich, zunächst das grundsätzliche Konzept und die technische Realisierung zu verstehen. Was ist TypoScript eigentlich? Was sind Top-Level-Objekte? Wie erfolgt eine Zuweisung? 8.1.1 Welche der folgenden Objekte sind keine TypoScript-Top-Level-Objekte? (2) a) config b) TEXT c) styles d) GMENU e) PAGE f) includelibs In TypoScript gibt es eine Reihe von Top-Level-Objekten (TLO) sowie zahlreiche weitere Objekte, die auf darunter liegenden Ebenen einzusetzen sind. Ein TLO ist nicht von anderen Objekten abhängig und kann daher immer direkt konfiguriert werden. Das Objekt TEXT ist ein sogenanntes Content-Objekt, das beispielsweise vom TLO PAGE abhängig ist, Antwort b) ist also richtig. Das Objekt GME- NU ist ein Menü-Objekt und damit vom Content-Objekt HMENU abhängig, Antwort d) ist daher ebenfalls richtig. Falsch dagegen sind alle anderen Antworten. Eine Übersicht über alle Objekte verschaffen Sie sich im entsprechenden Abschnitt der TypoScript Reference (TSref).² Nur die Antworten b) und d) sind korrekt. 8.1.2 Welche Aussagen zu TypoScript treffen zu? (2) a) TypoScript ist eine Programmiersprache wie ActionScript oder JavaScript. 1 http://www.tsref.de 2 http://docs.typo3.org/typo3cms/typoscriptreference/contentobjects/index.html 220
8.1 Allgemeines b) TypoScript ist eine Extension für TYPO3. c) TypoScript ist eine Möglichkeit zur Konfiguration von TYPO3. d) TypoScript steuert v.a. die Ausgabe der Website im Frontend. e) Um TypoScript verwenden zu können, muss man über umfangreiche PHP-Kenntnisse verfügen. In Antwort a) greifen wir ein häufig anzutreffendes Vorurteil auf; bei TypoScript handelt es sich jedoch im engeren Sinne nicht um eine Programmiersprache. Im TYPO3-Quellcode finden sich an zahlreichen Stellen Abfragen, die einen Abschnitt TypoScript-Code auswerten je nachdem, welche Werte in diesem Abschnitt definiert wurden, reagiert TYPO3 als System darauf in bestimmter Weise. Man kann TypoScript daher als Konfigurationssprache bezeichnen. TypoScript spielt eine derart zentrale Rolle im Kern von TYPO3, dass es nicht als Extension realisiert sein kann, eine Extension ließe sich deaktivieren das ist bei TypoScript nicht möglich, Antwort b) ist also falsch. Und da Sie durch die Verwendung von TypoScript ja gerade nicht mit dem zugrundeliegenden PHP-Code in Berührung kommen, müssen Sie auch über keine Programmierkenntnisse in der Sprache PHP verfügen, so ist Antwort e) also ebenfalls falsch. Da TypoScript nun hauptsächlich die Ausgabe der Website im Frontend steuert (mit Ausnahme von TypoScript-Config, auch TSconfig genannt, hier wird TypoScript auch im Backend eingesetzt), bleiben also nur c) und d) als richtige Antworten. 8.1.3 Sie möchten einen mehrzeilen Wert zuweisen. Welche der folgenden Code-Abschnitte wären anstelle der Fragezeichen syntaktisch korrekt? (1) page = PAGE page.10 = TEXT??? a) Es ist in TypoScript nicht möglich, mehrzeilige Werte anzugeben, nur einzeilige Wertzuweisungen sind möglich. b) page.10.value ( Hallo Welt 221
8 TypoScript ) c) page.10.value = ( Hallo Welt ) d) page.10.value = (Hallo Welt) e) page.10.value (Hallo Welt ) In manchen Fällen ist es sinnvoll, Werte in mehreren Zeilen zuzuweisen, z. B. um die Übersichtlichkeit des Codes zu erhöhen; mitunter ist dies sogar syntaktisch notwendig. Es ist also selbstverständlich möglich, Werte in mehreren Zeilen zu notieren, allerdings sind dabei runde Klammern als Begrenzer zu benutzen, die TYPO3 anzeigen, welche Zeilen zur Anweisung gehören. Damit aber runde Klammern auch in der Anweisung selbst verwendet werden können, gelten folgende Syntax-Regeln: Eine mehrzeilige Anweisung wird mit einer öffnenden runden Klammer eingeleitet. Der Zuweisungsoperator (=) entfällt in diesem Fall. Hinter der öffnenden Klammer werden weitere Zeichen in derselben Zeile ignoriert Inhalte werden also erst in der nächsten Zeile notiert. Damit die mehrzeilige Anweisung beendet ist, muss in der nächsten Zeile als erstes Zeichen eine schließende runde Klammer stehen. Somit ist also ausschließlich Antwort b) richtig. 222
8.1 Allgemeines 8.1.4 In TypoScript lassen sich Zeilen auskommentieren. Welche Zeichen sind als Kommentarzeichen zu verwenden? (4) a) // b) /*... */ c) # d) / e) <!--... -> Auch in der Arbeit mit TypoScript ist es, wie beim Programmieren in gängigen Programmiersprachen, durchaus üblich, bestehenden Code auszukommentieren (z. B. bei der Fehlersuche oder um eine bestimmte Funktionalität zu testen) oder den Code erläuternd zu kommentieren. Dafür stehen diverse Möglichkeiten zur Verfügung: Über den Doppel- Slash // lassen sich z. B. einzelne Zeilen auskommentieren, ebenso über das Rautezeichen #. Möchten Sie mehrere Zeilen auskommentieren, müssen Sie dies nicht an jedem Zeilenanfang erneut markieren, stattdessen lässt sich der auszukommentierende Bereich mit /* einleiten und mit */ beenden. Richtig sind also tatsächlich alle angebotenen Antworten, mit Ausnahme der letzten (die einen HTML-Kommentar darstellt). Das folgende Codebeispiel erläutert das Kommentieren in anschaulicher Weise: // Man kann einen Kommentar // mit zwei Slashes einleiten / oder auch nur mit einem einzelnen Slash # Mit dem Hash-Zeichen ist das ebenfalls möglich /* Oder sogar über mehrere Zeilen -- dabei muss der schließende Kommentar allerdings in einer eigenen Zeile ganz am Anfang stehen */ page = PAGE page.10 = TEXT page.10.value = Kommentar # Man kann aber NICHT inline kommentieren /* Und so AUCH NICHT */ page.10.value = Ich überschreibe den Wert 223
8 TypoScript 8.2 TypoScript-Setup und -Constants Ein TypoScript-Template umfasst die beiden Bereiche Constants und Setup. Während der Bereich Constants lediglich Konstanten aufnimmt, wird die Funktionalität der Website im Bereich Setup platziert. In beiden Bereichen stellt TypoScript eine Methode dar, hierarchische Informationen zu beschreiben. 8.2.1 Was müssen Sie in den Constants-Bereich eintragen, damit der folgende TypoScript-Setup- Code funktionstüchtig wird? (1) config.language = {$langkey} config.sys_language_uid = 1 config.htmltag_langkey = {$langkey} a) $langkey = de b) {$langkey = en} c) langkey = jp d) langkey = cn e) LANGKEY = at Konstanten werden im TypoScript-Setup grundsätzlich, wie im Code- Beispiel gezeigt, immer mit einem $-Zeichen und umschließenden geschweiften Klammern referenziert. Diese Zeichen dürfen allerdings bei der Definition im Constants-Bereich nicht mit angegeben werden, deshalb sind die Antworten a) und b) falsch. Zudem ist der Bezeichner einer Konstante case sensitive (Groß- und Kleinschreibung werden also unterschieden), weshalb auf die richtige Schreibweise genau zu achten ist. Die einzig richtige Antwort ist folglich c). 224