27.05.2020
Fluid Pages Seiten Layouts ohne EXT:fluidpages
Flexible Seitenlayouts in TYPO3 auf Basis von Fluid Dateien ließen sich bisher mit EXT:flux und EXT:fluidpages entwickeln. EXT:fluidpages kann man jetzt einsparen.
Mehr erfahren
Wir sind große Fans der TYPO3 Templating Engine Fluid. Zusammen mit den Erweiterungen EXT:flux und EXT:fluidcontent kann man damit sehr schnell flexible Inhaltselemente für seine Redakteure schaffen, die genau auf die individuellen Anwendungsfälle zugeschnitten sind. Aus Entwicklersicht lässt sich hierbei besonders bequem arbeiten, da man nur eine einzige Technologie benötigt, nämlich Fluid Markup. Des Weiteren sind keine php Klassen, TCA Konfiguration, Typoscript, Page TSconfig oder SQL Definitionen notwendig. Ein weiterer Vorteil ist, dass man pro Element nur 1 Datei mit dem Fluid Markup benötigt und keine Datenbankeinträge im CMS. Damit sind Inhaltselemente auf Basis von EXT:flux und EXT:fluidcontent sehr portabel und gut zu versionieren und deployen. Mehr zu der Technologie findet sich unter https://fluidtypo3.org/documentation/templating-manual/templating/creating-templates/content-element.html.
Nun wurde in Version 8.0.0 von EXT:flux angekündigt, dass man das Ganze auch ohne EXT:fluidcontent errreichen kann. Wir stellen hier einmal zusammen, wie man ein vorhandenes Projekt von EXT.fluidcontent befreit und nur mit EXT:flux seine Inhaltselemente bereit stellt. Dabei gehen wir in folgenden Codebeispielen davon aus, dass alle Elemente in einer Provider oder Sitepackage Extension "EXT:template" mit dem Vendor Namen AEMKA gebundelt werden. Wie bei jedem systemtechnischen Eingriff empfehlen wir ein Backup von Dateisystem und Datenbank der TYPO3 Installation vorab. Getestet wurde es mit Version 8.2.1 von EXT:flux und TYPO3 CMS 8.7.13.
Dazu ggf. die Abhängigkeit auf EXT:fluidcontent in EXT:template/ext_emconf.php in $EM_CONF[$_EXTKEY]['constraints']['depends'] entfernen. Danach kann EXT:fluidcontent im TYPO3 Extension Manager deinstalliert und bei Bedarf direkt gelöscht werden.
Für jedes Inhaltselement in EXT:template/Resources/Private/Templates/Content/ muss noch eine Zeile Code in der EXT:template/ext_localconf.php angelegt werden. Dies wird aber vermutlich später auch noch unnötig und komplett automatisiert, in der neusten Github master Version von EXT:flux ist es zumindest derzeit schon so:
\FluidTYPO3\Flux\Core::registerTemplateAsContentType( 'AEMKA.Template', 'EXT:template/Resources/Private/Templates/Content/SomeElement.html' ); \FluidTYPO3\Flux\Core::registerTemplateAsContentType( 'AEMKA.Template', 'EXT:template/Resources/Private/Templates/Content/AnotherElement.html' ); ...
Für jedes Inhaltselement, das man bereits mit EXT:fluidcontent angelegt hat und migrieren möchte, muss man einen SQL Befehl in folgender Art ausführen:
UPDATE tt_content SET CType = "template_someelement" WHERE tx_fed_fcefile = "AEMKA.Template:SomeElement.html" AND CType = "fluidcontent_content"; UPDATE tt_content SET CType = "template_anotherelement" WHERE tx_fed_fcefile = "AEMKA.Template:AnotherElement.html" AND CType = "fluidcontent_content"; ...
Zusätzlich müssen jetzt ggf. noch die Redakteursrechte angepasst werden, da die Inhaltselement Typen, mit denen die Redakteursrechte vormals eingerichtet wurden, sich nun ja alle geändert haben.
Im TYPO3 Install Tool können unter "Important actions" > "Compare current database with specification" die jetzt unnötigen Datenbankspalten entfernt werden.
Pro Element kann nun verlässlich ein Icon vergeben werden mit dem Markup:
<flux:form.option.icon value="EXT:template/Resources/Public/Icons/Content/Icon.svg" />
innerhalb des flux:form Tags.
In der Version 8 von Flux erhielten wir im Frontend die Meldung, dass die Flux Inhaltselemente nicht gerendert werden konnten. Mit den folgenden Zeilen in der ext_localconf.php konnten wir hier Abhilfe schaffen. Ob das ein generelles Problem war und ob das in Version 9 von Flux immer noch nötig sein wird, können wir aktuell nicht sagen:
if (TYPO3_MODE == 'FE') { $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tstemplate.php']['includeStaticTypoScriptSources'][] = \FluidTYPO3\Flux\Backend\TableConfigurationPostProcessor::class . '->processData'; }
Falls Ihr eine php Controller Klasse hattet, der Daten für EXT:fluidcontent vor dem Rendering aufbereitet hat, müsst ihr ggf. den Klassennamen ändern, von dem euer ContentController erbt von, bevor Ihr EXT:fluidcontent entfernt:
class ContentController extends \FluidTYPO3\Fluidcontent\Controller\AbstractContentController
auf:
class ContentController extends \FluidTYPO3\Flux\Controller\ContentController
Man kann sich eine Extension im System sparen. Zusätzlich wurde die Entwicklung an EXT:fluidcontent auch eingestellt und soll nicht mehr für TYPO3 CMS 9 verfügbar sein, womit es auch ein weiterer vorbereitender Schritt für das Update auf die kommende LTS Version von TYPO3 CMS ist.
Mit der Umstellung sind auch einige kleine Bugs Geschichte, z.B. die Probleme mit verschwindenden Icons der Elemente. Außerdem hat jedes Inhaltselement nun einen eigenen Inhaltselementtyp (CType), so dass man in Redakteursrechten nun explizit definieren, dass Redakteure nur auf bestimmte Elemente Zugriff haben genau wie, dass in Container Elementen nur bestimmte Inhaltselemente erlaubt sind.
Wenn Sie technischen Support, Schulung oder andere TYPO3 Leistungen benötigen, sprechen Sie uns gerne an.
Es gibt zu diesem Thema auch einen weiteren Artikel:
Fluid Pages Seiten Layouts ohne EXT:fluidpages