Marker und Subparts werden stets mit 3 Rautenzeichen eingeleitet und beendet. Die Großschreibung des Bezeichners ist keine zwingende TYPO3-Vorgabe, wird aber der Übersicht und Einheitlichkeit halber empfohlen. Der Name des Bezeichners ist frei wählbar. Subparts können in HTML-Kommentare gesetzt werden; Marker nicht. Die oft gesehenen Angaben begin und end dienen nur der Übersicht und werden nicht von TYPO3 ausgelesen.
Das Templating mit Markern und Subparts gilt als veraltet!
Für neue Websites ist die Verwendung von Fluid-Templates dringend empfohlen.
In älteren, PiBase-basierten TYPO3-Extensions sind Marker leider immer noch anzutreffen.
<!-- Inhalt der HMTL-Vorlage --> ... <div id="logo">###LOGO###</div> <!-- ###NAVIGATION### begin --> <ul id=“navigation“> <li><a href=“#“>Home</a></li> ... </ul> <!-- ###NAVIGATION### end --> ...
Bei Markern wird der Inhalt an die gewählte Stelle eingefügt. Bei Subparts wird der in der Vorlage dazwischenliegende Inhalt ersetzt. Auf diese Weise kann ein HTML-Template zu Layoutzwecken mit Beispiel-Inhalt gefüllt werden, der mit Subparts umschlossen wird und von TYPO3 ersetzt werden kann.
Im PAGE-Objekt wird ein TEMPLATE-Objekt erzeugt, dem die HTML-Vorlage zugewiesen wird. Marker und Subparts werden angesprochen und mit dem gewünschten Inhalt ersetzt:
page.10 = TEMPLATE page.10 { template = FILE template.file = fileadmin/vorlage.html marks.LOGO = IMAGE marks.LOGO { ... } subparts.NAVIGATION = HMENU subparts.NAVIGATION { ... } }
Durch workOnSubpart = DOKUMENT
wird nur der Teil zwischen den beiden Subpart-Bezeichnern als Vorlage verwendet. Der Rest der Template-Vorlage (<head>
<body>
, <title>
<meta>
etc.) wird ausgeschlossen. Wichtig, da diese Elemente von TYPO3 immer selbst in den Quellcode der Seite eingefügt werden und über weiteres Typoscript angepasst werden können!
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Seitentitel</title> </head> <body> <!-- ###DOKUMENT### begin --> <div>###IMAGE###</div> <div>###CONTENT###</div> <div>###FOOTER###</div> <!-- ###DOKUMENT### end --> </body>
page.10 = TEMPLATE page.10 { template = FILE template.file = fileadmin/vorlage.html workOnSubpart = DOKUMENT marks { HEADER = IMAGE HEADER { ... } CONTENT < styles.content.get FOOTER = TEXT FOOTER { ... } } }
Standardmäßig wird der gesamte Teil zwischen zwei Subparts komplett ersetzt. Eventuell darin enthaltene Marker können daher nicht genutzt werden.
Um dies doch zu erreichen, kann mit substMarksSeparately = 1
eine sequenzielle Ersetzung eingestellt werden: zuerst werden die Subparts ersetzt, dann die Marker. Wenn der gewünschte Marker zusätzlich unter subparts.SUBPART
an die gewünschte Stelle des Wertes gesetzt wird, kann er mit marks.MARKER
ersetzt werden.
<!-- ###SUBPART### --> <div>###MARKER###</div> <!-- ###SUBPART### -->
page = PAGE page { 10 = TEMPLATE 10 { template = FILE template.file = fileadmin/vorlage.html substMarksSeparately = 1 subparts { SUBPART = TEXT SUBPART.value = Hello ###MARKER### } marks { MARKER = TEXT MARKER.value = world! } } } Ausgabe: Hello world!
Selbstverständlich wird damit nur der Marker ersetzt. Das div
-Element wird komplett vom Subpart entfernt und muss mit einem wrap
neu hinzugefügt werden.