1. Einleitung
Dass Fluid die neue Template-Engine für TYPO3 ist und wie es dazu kam, brauche ich nicht nochmal detailliert zu erklären. Mit FLUIDTEMPLATE hält jedoch ein neues Content-Object Einzug ins TypoScript um Fluid neben der Verwendung in Extensions auch für die TYPO3-Integration nutzen zu können.
Nach anfänglichen Herumprobieren (danke an Marco für seine ausführliche Erklärung) wurde ich jedoch in meiner Euphorie etwas gebremst. Ein Pendant zu den herkömmlichen Subparts scheint es nicht mehr geben…
2. Warum Subparts besser als Marker sind
Wer in der Vergangenheit vor der Wahl stand, Marker oder Subparts zu verwenden, hat sich zu Beginn den Einsatz von Subparts nicht recht vorstellen können. Mit Markern kann man schließlich auch wunderbar Inhalte an einer Stelle im HTML-Template einfügen.
Wer jedoch das HTML-Template möglichst nicht abändern möchte, wird davor zurückschrecken, eingesetzte Dummy-Texte, die einen Inhaltsbereich simulieren sollen, herauszulöschen und durch einen Marker zu ersetzen. Eventuell soll das Template später noch in anderen Systemen Verwendung finden oder man soll es direkt mit dem Browser öffnen können und so eine Vorstellung vom fertigen Layout erhalten. Der Einsatz von Markern eignet sich also nicht für zerstörungsfreies Templating.
3. Blick ins FLUIDTEMPLATE
Was früher die Marker waren, sind in der Zeit von FLUIDTEMPLATE schlicht Variablen. Während man früher einen Marker an den typischen Rauten-Zeichen erkannt hat, zeigt sich eine Variable in Fluid an den geschweiften Klammern.
<!-- Alte Schreibweise --> <div id="content"> ###CONTENT### </div> |
<!-- Neue Schreibweise --> <div id="content"> {CONTENT} </div> |
Ähnlich wie in der Oldschool-Methode lassen sich diese (unter der Verwendung von css_styled_content) über TypoScript zuweisen:
page.10 = FLUIDTEMPLATE page.10 { file = fileadmin/template.html variables.CONTENT < styles.content.get } |
Hinweis: Um die Verwendung von htmlspecialchars() zu verhindern, kann man einen HTML-ViewHelper einsetzen:
<div id="content"> <f:format.html parseFuncTSPath="lib.parseFunc"> {CONTENT} </f:format.html> </div> |
Hinweis2: Auf die Verwendung von Templates, Layouts und Partials in Fluid geht Marco ausführlich ein.
4. Subparts in Fluid?
Subparts gibt es in Fluid nicht und so wie es aussieht, wird es leider auch nie welche geben. Dennoch wäre es schön, wenn man den gesetzten Dummy Text nicht entfernen müsste.
Mit einem Trick und unter Verwendung eines cObject-ViewHelpers ist es dennoch möglich, Dummy Texte weiterhin zu erhalten. Man muss den ViewHelper lediglich mit einem öffnenden und einem schließenden Tag schreiben. Der Text dazwischen wird durch das jeweilige TypoScript-Objekt ersetzt.
Verwendung von Subparts beim herkömmlichen Templating:
<!-- Alte Schreibweise --> <div id="content"> <!-- ###CONTENT### --> <h1>Dalmatiner</h1> <p>Der Dalmatiner ist ein mittelgroßer bis großer gut proportionierter, getupfter, kräftiger, lebhafter, sehr auffälliger Hund. Sein ausgeglichener, schlanker Körper besitzt einen starken Rücken mit einer gleichmäßigen geraden Rückenlinie.</p> <!-- ###CONTENT### --> </div> |
page.10 = TEMPLATE page.10 { template = FILE template.file = fileadmin/template.html subparts.CONTENT < styles.content.get } |
Erhaltung der Dummytexte in Fluid:
<!-- Neue Schreibweise --> <div id="content"> <f:cObject typoscriptObjectPath="lib.content"> <h1>Dalmatiner</h1> <p>Der Dalmatiner ist ein mittelgroßer bis großer gut proportionierter, getupfter, kräftiger, lebhafter, sehr auffälliger Hund. Sein ausgeglichener, schlanker Körper besitzt einen starken Rücken mit einer gleichmäßigen geraden Rückenlinie.</p> </f:cObject> </div> |
lib.content < styles.content.get |
Hinweis: Der direkte Aufruf <f:cObject typoscriptObjectPath=“styles.content.get“ /> war mir leider nicht möglich.
5. Links zu Fluid und FLUIDTEMPLATE
- Die offizielle Erklärung des FLUIDTEMPLATE auf typo3.org
- FLUIDTEMPLATE einbinden – gut erklärt von Marco
- Sebastian zeigt auch noch einmal die Verwendung von FLUIDTEMPLATE
Wie immer freue ich mich über jeden Kommentar.
Gruß aus Rosenheim,
Alex Kellner