TYPO3-Workshop TypoScript und Templates RRZN Universität Hannover Regionales Rechenzentrum für Niedersachsen Templates und TypoScript Ziele dieses Kapitels Einführung der Begriffe Template und TypoScript TypoScript an Hand einfacher Templates TypoScript Syntax Kennlernen der Werkzeuge zur Template-Berarbeitung Template-Analyzer TypoScript Object Browser (TCO) Template Record Editor Ausgangslage: Site mit wenigen Seiten und ohne Template Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 2 Templates in Typo3 steuern die Web-Darstellung von Seiten ohne Template keine Web-Seite steuern die Web-Darstellung von Seiten Konfiguration mit TypoScript hierarchisch geordnet Datensatz in der Tabelle sys_template sind keine HTML-Dateien Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 3 TypoScript TYPO3-spezifische Syntax zur Beschreibung von Daten hierarchische Struktur in ASCII-Text wird in einen mehrdimensionalen PHP-Array übersetzt (TS-Parser) „TypoScript is parsed that means it is transformed into a PHP array!“ ermöglicht die Konfiguration von php-Dateien in Typo3 TypoScript ist zu finden in Page TSConfig User TSConfig TypoScript Templates Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 4 TypoScript – Erstes Template Ausgangslage Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 5 Erstes Template erstellen Start-Seite im Seitenbaum wählen Web-Module Template Button „Create Template for a new site“ Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 6 Template-Werkzeuge – Pulldown-Menü Werkzeuge im Template-Modul Constant-Editor Info/Modify TypoScript Object Browser Template Analyzer Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 7 Hello-World-Template TypoScript-Template Hello-World # Default PAGE object: page = PAGE page.10 = TEXT page.10.value = HELLO WORLD! Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 8 Hello-World-Template TypoScript-Template Hello-World # Default PAGE object: page = PAGE page.10 = TEXT page.10.value = HELLO WORLD! Zeile 1: Kommentar Zeile 2: Objekt vom Typ PAGE mit der Bezeichnung page page.10 Property cObj vom Typ TEXT Die Nummer legt die Reihenfolge der cObj-Elemente auf der Seite fest Zeile 3: page.10.value Property value des ObjektsTEXT (Text erhält den Wert „HELLO WORLD!“) Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 9 PAGE PAGE TypoScript Objekt „setup“-Objekt startet Web-Präsentation einer Seite (Web-Ausgabe eines Datensatzes uid aus Tabelle pages) notwendig (ohne PAGE keine Ausgabe) Weitere Informationen siehe auch TSref typo3.org Dokumentation – Core Documentation (tsref.de) Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 10 TypoScript-Elemente Erste Übersicht über TypoScript-Elemente (Details folgen): Data types Conditions Functions setup-Objekte PAGE config ... Content-Objects TEXT HTML HMENU IMAGE ... Menu Objects Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 11 page.10=TEXT page = PAGE page.10 = TEXT page.10.value=Hallo cObject erste Formulierung Objekt vom Typ TEXT wird an die Position 10 auf die Seite gesetzt Wert ist Hallo cObject präziser formuliert (siehe TSref) PAGE hat die Property 1,2,3, … zulässiger Datentyp ist cObject (Content Object) die Nummer legt die Reihenfolge der Content-Objekte auf der Seite fest Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 12 Content Objects (cObject) Konfigurieren die Darstellung von Inhaltselementen auf der Web-Seite Inhaltselemente werden aus Tabellen geladen oder in TypoScript erzeugt Beispiele für Content Objects (siehe TSref) TEXT HTML CONTENT HMENU FORM PHP_SCRIPT … Werte für die Darstellung werden durch Properties des jeweiligen Content Object festgelegt Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 13 Content-Element HTML Content-Element HTML an Position 10 Hinweis zur Syntax: Runder Klammern ( eine Zeile noch eine Zeile ) fassen mehrere Zeilen zusammen und weisen diesen einem Wert zu Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 14 page = PAGE page.typeNum = 0 page.10=HTML page.10.value ( <h1>Hallo HTML</h1> Dies ist ein ... <p>Inhalt wird mit TypoScript erzeugt! <hr> <h5>Typo3</h5> ) Ein Menü Position 5 wird ein HMENU (ContentObject vom Typ HMENU) gesetzt HMENU ist ein Array von MENUObjekten MENUE-Objekte sind z.B. GMENU, TMENU, IMGMENU, … An Position1 von HMENU wird ein TMENU gesetzt wrap umschließt das aktuelle Elemente mit Werten | bezeichnet das aktuelle Element Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 15 page.5 = HMENU page.5.1=TMENU page.5.1.wrap = | <br><br> page.5.1.NO.AtagBeforeWrap=1 page.5.1.NO.linkWrap=&nbsp; | &nbsp; TypoScript am Beispiel Menü An Hand der MENU-Anweisungen werden TypoScript-Elemente vorgestellt: { } < =< > Properties zusammenfassen Objekte kopieren Objekte referenzieren Objekte löschen Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 16 page.5 = HMENU page.5.1=TMENU page.5.1.wrap = | <br><br> page.5.1.NO.AtagBeforeWrap=1 page.5.1.NO.linkWrap = &nbsp; | &nbsp; TypoScript { } TypoScript Anweisungen für das HMENU lassen sich auch übersichtlicher formulieren { } fassen Wertzuweisungen für Properties eines Objekts zusammen Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 17 page.5 = HMENU page.5.1=TMENU page.5.1.wrap = | <br><br> page.5.1.NO.AtagBeforeWrap=1 page.5.1.NO.linkWrap = &nbsp; | &nbsp; page.5 = HMENU page.5.1=TMENU page.5.1{ wrap = | <br><br> NO { AtagBeforeWrap=1 linkWrap = &nbsp; | &nbsp; } } TypoScript – Anweisungen kopieren < Konzept: TypoScript-Anweisungen werden an einer Stelle festgelegt und an andere Stellen kopiert < kopiert einen Objekt-Pfad page.5 < temp.MeinMenu temp.MeinMenu wird nach page.5 kopiert top-level-Pfade mit der Bezeichnung temp (und styles) werden vom Parser nach dem Kopieren gelöscht! Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 18 temp.MeinMenu = HMENU temp.MeinMenu.1 = TMENU temp.MeinMenu.1 { wrap = | <br><br> NO { AtagBeforeWrap=1 linkWrap = &nbsp; | &nbsp; } } page = PAGE page.typeNum = 0 page.5 < temp.MeinMenu Objekt-Pfade referenzieren =< <= referenziert einen Objekt-Pfad Identische Objekt-Pfade können an mehreren Stellen im TypoScript-Code verwendet werden temp darf nicht für referenzierte ObjektPfade verwendet werden (da vom Parser entfernt) Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 19 lib.MeinMenu = HMENU lib.MeinMenu.1 = TMENU lib.MeinMenu.1 { wrap = | <br><br> NO { AtagBeforeWrap=1 linkWrap = &nbsp; | &nbsp; } } page = PAGE page.typeNum = 0 page.5 <= lib.MeinMenu Objekt-Pfade löschen > lib.MeinMenu > Objekt lib.Meinu ist ab der TypoScriptZeile gelöscht. Das Menü wird in diesem Fall nicht angezeigt – Demo-Anwendung > wird benötigt, um in Template-Hierarchien übergeordnete Objekt-Pfade sicher zu bereinigen und durch eigene Werte zu ersetzen. Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 20 lib.MeinMenu = HMENU lib.MeinMenu.1 = TMENU lib.MeinMenu.1 { wrap = | <br><br> NO { AtagBeforeWrap=1 linkWrap = &nbsp; | &nbsp; } } page = PAGE page.typeNum = 0 lib.MeinMenu > page.5 < lib.MeinMenu Bedingungen Bedingungen werden durch [bedingung] eingeleitet [else] Verzweigung [end] Ende der Bedinugung [global] setzt alle Bedingungen zurück kehrt zur obersten (globalen) TypoScript-Ebene zurück Es gibt Bedingungen für Browser Betriebssysteme Zeiten Sprachen IP-Adressen …. siehe TSRef Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 21 [browser = netscape] page.5 =< lib.MeinMenu [else] page.5=TEXT page.5.value = KEIN MENUE [end] [global] Kommentare in TypoScript # Dies ist ein Kommentar // ebenfalls ein Kommentar /* Kommentar-Block */ # bisher keine Inhalts-Elemente ausgegeben! Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 22 Inhaltselemente darstellen Ziel: Inhaltselemente von Seiten ausgeben Schritte einfaches Template für die Ausgabe von TextElementen statische Templates einsetzen content (default) nutzen Template-Hierarchie Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 23 Ziel: Text von Seiten ausgeben Typo3-php-classes Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 24 Text von Seite ausgeben – TypoScript cObject vom Typ CONTENT Mit Property table wird die Tabelle festgelegt (Inhaltselemente einer Seite sind Datensätze in der Tabelle tt_content) select-Anweisung für DB-Abfrage wird spezifiziert tt_content wird als COA (Content Object Array) festgelegt Positition 10 header-Feld des Text-Records Positions 20 bodytext-Feld Anmerkungen: Es werden nur Text-Elemente des Seite angezeigt! Für solche Standard-Anwendungen gibt es fertige statische Templates! Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 25 page = PAGE page.typeNum = 0 page.10 = CONTENT page.10{ table = tt_content select { pidInList = this orderBy=sorting } } tt_content = COA tt_content{ 10 = TEXT 10.field = header 10.wrap = <h1> | </h1> 20 = TEXT 20.field = bodytext } statische Templates – content (default) Satz vorgefertigter Templates in Typo3 („preset chunks of TypoScript code“) werden in der Liste „Include statics“ im Template-Record-Editor aufgeführt sind nicht änderbar („read only“) CSS styled content Ausgabe der Inhalte mit "CSS-Rendering" Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 26 Inhalte mit style.content.get einfügen Einfügen von Inhalt in eine Seite # Default PAGE object: page = PAGE page.10 = TEXT page.10.value = Inhalt: page.30 < styles.content.get # die rechte Spalte page.40 < styles.content.getRight Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 27 Bemerkungen zu TypoScript TypoScript ist nur eine Syntax Folgendes ist zulässig (aber wirkungslos) (Objekt bla mit Properties) bla = zui{ bg=gelb tzum=123 tzum { 1 = rt } TypoScript wird vom Parser in einen php-Array überführt der Array wird von entsprechenden php-Dateien ausgewertet Wirkung der TypoScript-Objekte (Arrays) wird von der php-Datei (Typo3Core, Extension) festgelegt (nicht von TypoScript) Information und Hilfe TSRef, Extension-Dokumentation TypoScript property lookup Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 28 HTML-Vorlagen und CSS Aufbau einer Web-Site allein mit TypoScript-Template möglich aber nicht sinnvoll Konzept: HTML-Design-Vorlagen (HTML-Templates)und CSS mit TypoScript werden nur die dynamischen Elemente (Inhalte, Menüs, Fußzeilen, etc.) gesteuert. Vorteil u.a.: Design-Vorlage und TypoScript können getrennt voneinander bearbeitet werden Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 29 HTML-Template HTML-Templage (HTML-Vorlagen-Datei) (fileadmin/vorlagen/homepage.html) <html> <head> </head> <body> <!-- ###DOCUMENT_BODY### begin --> <h1>Demo-Site</h1> ###CONTENT### <!-- ###DOCUMENT_BODY### end --> </body> </html> Anmerkung: fileadmin/vorlagen ist ein übliches Verzeichnis, im TLUH-Template liegen die Vorlagen in typo3conf/ext/... (im fileadmin also nicht sichtbar) Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 30 HTML-Template in TypoScript TypoScript page = PAGE page.10 = TEMPLATE page.10 { template=FILE template.file=fileadmin/vorlagen/homepage.html workOnSubpart = DOCUMENT_BODY marks { CONTENT < styles.content.get } } Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 31 Anwendungs-Beispiele Einfacher Tag tt_content.text.20.parseFunc.tags.orange = TEXT tt_content.text.20.parseFunc.tags.orange { current = 1 wrap = <font color=orange>|</font> } Interner Bereich mit Zugangsregeln über IP-Nummer page.10.subparts.SUB_CONTENT.10 > [IP= 130.75.5.*] page.10.subparts.SUB_CONTENT.10 = COA page.10.subparts.SUB_CONTENT.10 { 10 < styles.content.get } [globals] Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 32 Konstanten Konstanten (Contants) im „Constants“-Feld eines Templates definierte Werte constante = wert es gilt TypoScript-Syntax im „Setup“-Feld eingefügt {$constante} Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 33 Template-Strukturen Rootlevel-Templates im Template-Record ist Rootlevel aktiviert Konfiguration gilt innerhalb der gesamten Rootline – bis Werte in Sublevel-Templates überschrieben oder ergänzt werden Sublevel-Templates innerhalb einer Rootline mit bestehenden Rootlevel-Template überschrieben/ergänzen bestehenden Template-Record Basis-Templates enthalten TypoScript (und andere Template-Record-Konfigurationen) werden in Rootleve-Templates/Sublevel-Templates eingebunden schaffen Ordnung im TypoScript-Code Template on next level Template für die nächste Ebene Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 34 Werkzeuge zur Template-Bearbeitung Überblick über die wichtigsten Werkzeuge zur Template-Bearbeitung an Hand eines Standard-Templates Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 35 Template-Werkzeuge Werkzeuge im Template-Module Pull-down-Menü Constant Editor Info/Modify TypoScript Objekt Browser (TSOB) Template Analyzer Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 36 TypoScript Object Browser (TSOB) zeigt TypoScript-Objekte und Properties Ändern, Hinzufügen von Properties Kontrolle und Anpassung bei der TypoScript-Entwickling Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 37 Template Analyzer Anzeigen der Template Hierarchie Quelltext Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 38 Admin-Panel Admin-Panel – TypoScript Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 39 typnum – &id und &type Jede Seite wird aufgerufen mit http://domain/index.php?id=xx wobei xx die Seiten-ID der Seite in Typo3 ist Zusätzlicher Parameter kann type sein: http://domain/index.php?id=xx&type=n n ist der Wert für den Ausgabetyp der Seite Der Ausgabetyp wird mit der PAGE-Propertyp typeNum festgelegt Standard-Wert ist 0 (und kann beim Aufruf entfallen) Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 40 page.typeNum Beispiel: Zwei Ausgabe-Typen für eine Seite page = PAGE page.typeNum = 0 page.bodyTag = <BODY bgColor="{$bgCol}"> page.10 = HTML page.10.value = {$zf} page.10.value.case = upper zweiteAusgabe = PAGE # BEACHTE SYNTAX {} zweiteAusgabe{ typeNum = 30 bodyTag = <BODY bgColor=yellow> 10 = TEXT 10.value = Ausgabe mit typeNum 30 } Aufruf http://domain/index.php?id=1&type=30 Regionales Rechenzentrum für Niedersachsen T. Kröckertskothen | April 2005 | Folie 41