Gridelements werden in Kürze für TYPO3 CMS 8 im TER erscheinen. Sie sind bereits jetzt im Git-Master auf git.typo3.org verfügbar und funktionieren weitgehend mit der aktuellen TYPO3-Version. Dieses Tutorial beschäftigt sich mit Neuheiten bei der Frontend-Ausgabe unter CMS 8.
Geschätzte Lesezeit: 4 Minuten
... gibt es hier nun ein kurzes Tutorial, wie man die Frontend-Ausgabe von Gridelements für TYPO3 CMS 8 anpasst. Es scheint aktuell das ein oder andere Mißverständnis hinsichtlich der Änderungen in der neuen TYPO3-Version zu geben. Zudem kursieren verschiedene Code-Snippets in Foren und Social-Media-Gruppen, mit deren Hilfe man Probleme, die sich angeblich mit CMS 8 ergeben sollen, beheben können soll.
Dieses Tutorial erklärt kurz und knapp, was man tun - oder ggf. auch nicht tun - sollte, wenn man Gridelements mit CMS 8 und CSS-Styled-Content, Fluid-Styled-Content oder einem komplett eigenen TypoScript-Setup im Frontend ausgeben will.
Wenn man sich den folgenden Code aus dem Default-Grid-Setup von Gridelements anschaut, wird schnell klar, daß es zunächst nicht auf die verwendete Ausgabe-Methode ankommt. Unabhängig von CSS-Styled-Content, Fluid-Styled-Content oder eigenem TypoScript für die Frontendausgabe, verwendet Gridelements ein relativ minimalistisches Setup.
lib.gridelements.defaultGridSetup {
columns {
default {
renderObj = COA
renderObj {
20 =< tt_content
}
}
}
}
plugin.tx_gridelements_pi1 >
tt_content.gridelements_pi1 >
tt_content.gridelements_pi1 = COA
tt_content.gridelements_pi1 {
#10 =< lib.stdheader
20 = COA
20 {
10 = USER
10 {
userFunc = GridElementsTeam\Gridelements\Plugin\Gridelements->main
setup {
default < lib.gridelements.defaultGridSetup
}
}
}
}
Bisheriges und aktuelles Gridelements Default-TypoScript-Setup
Wie man in Zeile 6 sieht, wird für die eigentliche Ausgabe der Kind-Elemente durch den Operator =< eine Referenz auf tt_content gesetzt. Das bedeutet, daß sämtliche Definitionen von tt_content exakt so übernommen werden, wie vom verwendeten Setup vorgegeben. Gridelements nimmt dabei keinerlei zusätzliche Änderungen vor.
In Zeile 12 und 13 werden zunächst möglicherweise vorhandene andere Setups für Gridelements gelöscht, um sicherzustellen, daß keine Reste einer Plugin-Registrierung oder ähnlicher Aktionen übrig bleiben. Danach erfolgt ein minimales Setup als COA mit einem darin enthaltenen weiteren COA sowie einem USER-Objekt. Darin befindet sich die essentiell wichtige Funktion Gridelements->main, mit deren Hilfe die Kinder geholt und das für die einzelnen Container-Varianten vorgesehen Setup angewendet wird.
Das zuvor definierte Default-Setup wird dann in Zeile 23 zugewiesen und damit funktioniert Gridelements wie gewohnt und zwar unabhängig vom verwendeten Basis-Setup.
Die Ausgabe einer eigenen Überschrift für Gridelements-Container ist per Default nicht vorgesehen, kann aber relativ einfach aktiviert werden. Man muß lediglich in Zeile 16 das # vor 10 =< lib.stdheader entfernen, um eine Referenz auf die Header-Definition von CSS-Styled-Content zu aktivieren. Innerhalb einer eigenen Definition für das Frontend-Setup kann man sich zur Vereinfachung eine Library mit identischem Namen anlegen und genauso auf diese referenzieren.
Das Setup von lib.stdheader dient hier nur als Beispiel für eine mögliche Eigendefinition und ist keinesfalls als maßgebliche Empfehlung zu betrachten!
lib.stdheader = COA
lib.stdheader {
10 = TEXT
10 {
field = header
htmlspecialChars = 1
typolink.parameter.field = header_link
dataWrap = <h{field:header_layout}>|</h{field:header_layout}>
dataWrap {
override = <h{$content.defaultHeaderType}>|</h{$content.defaultHeaderType}>
override.if.isFalse.field = header_layout
}
}
}
tt_content.gridelements_pi1 {
10 =< lib.stdheader
20 = COA
20 {
10 = USER
10 {
userFunc = GridElementsTeam\Gridelements\Plugin\Gridelements->main
setup {
default < lib.gridelements.defaultGridSetup
}
}
}
}
Modifziertes Gridelements-Setup mit eigenem lib.stdheader
Mit CMS 8 wurde für Fluid-Styled-Content eine vereinheitlichte Ausgabe über die Library lib.contentElement eingebaut. Selbstverständlich kann man diese Vereinheitlichung auch auf Gridelemente anwenden, jedoch braucht man dafür ein geringfügig modifiziertes Default-Setup, um die Inhalte der Kindelemente an das Fluid-Template zu übergeben.
lib.gridelements.defaultGridSetup {
columns {
default {
renderObj = COA
renderObj {
20 =< tt_content
}
}
}
cObject =< lib.contentElement
}
plugin.tx_gridelements_pi1 >
tt_content.gridelements_pi1 >
tt_content.gridelements_pi1 =< lib.contentElement
tt_content.gridelements_pi1 {
# Fluid Styled Content liefert aktuell nur Default
# Stattdessen muß Generic verwendet werden, weil es kein Default Template gibt
templateName = Generic
variables {
content = COA
content {
10 = USER
10 {
userFunc = GridElementsTeam\Gridelements\Plugin\Gridelements->main
setup {
default < lib.gridelements.defaultGridSetup
1 < lib.gridelements.defaultGridSetup
1 {
cObject {
templateName = OneColumn
templateRootPaths {
20 = EXT:EXTNAME/Resources/Private/Templates/MyTemplatePath/
}
}
}
}
}
}
}
}
Modifziertes Gridelements-Setup für den Einsatz von lib.contentElement
Es gibt im Grund nur minimale Unterschiede zum Original-Setup, nämlich in den Zeilen 10, 15 und 20, sowie im Block ab Zeile 30.
Da Gridelements auch schon vor CMS 8 problemlos mit FLUIDTEMPLATE als Ausgabe arbeiten konnte, muß man lediglich wie gewohnt das in Zeile 10 eingebundene cObject verwenden. In diesem Fall wird dort eine Referenz auf lib.contentElement gesetzt, weil darin bereits ein vollständiges Setup für ein FLUIDTEMPLATE vorhanden ist. In Zeile 15 wird nun dasselbe lib.contentElement für die Ausgabe des umschließenden Containers referenziert.
Edit: Fluid Styled Content verwendet templateName = Default innerhalb von lib.contentElement, allerdings fehlt das dazugehörige Template, weswegen es zu Exceptions kommen kann. Als Workaround kann man stattdessen templateName = Generic verwenden.
Damit nun die Ausgabe weiterhin wie gewohnt funktioniert, muß das bisherige Setup inklusive USER-Objekt wie in Zeile 20 zu sehen in eine Variable namens content verschoben werden. Diese Variable kann dann im Fluid selbst verwendet werden, um den eigentlichen Inhalt zu platzieren.
im Block ab Zeile 30 ist ein Beispiel für die Ausgabe eines einspaltigen Containers zu sehen, der aus einer eigenen Extension heraus über ein eigenes Template mit dem Namen OneColumn verfügt. Sämtliche weiteren Möglichkeiten der Ausgabe von FLUIDTEMPLATE sind natürlich ebenfalls verwendbar. Beispiele dafür gibt es in der TypoScript-Referenz.
Wer mit Gridelements unter CMS 8 schnell zu einer Ausgabe im Frontend kommen will, sollte das Default-Setup in jedem Fall unverändert lassen.
Wer dabei außerhalb von CSS-Styled-Content mit lib.stdheader für die Überschriftenausgabe arbeiten möchte, muß sich dafür ggf. eine eigene Library namens stdheader anlegen.
Wer meint, auf die neue Library lib.contentElement von Fluid-Styled-Content zurückgreifen zu müssen, benötig mindestens ein zusätzliches cObject und einige Modifikationen am Default-Setup.
© Copyright 2024 Cybercraft GmbH