Sidequests

Freezed Statische Websites, gebaut mit Fluid

Nicht jede Website braucht ein CMS. Die Landingpage zur Kampagne, die Microsite zum Jubiläum, das Archiv eines abgeschlossenen Projekts: Solche Seiten ändern sich selten oder nie, und trotzdem hängen sie oft an einer vollwertigen TYPO3- oder WordPress-Installation, die aktuell gehalten werden will. Für diese Fälle habe ich Freezed gebaut, einen statischen Site-Generator, der zwei Dinge anders macht als die üblichen Vertreter: Er läuft auf PHP und nutzt Fluid.

Templates rein, HTML raus

Das Prinzip ist schnell erklärt. Im Projekt liegen die Inhalte als Ordnerstruktur: Jede Seite ist ein Ordner mit einem Fluid-Template und einer variables.php für die Seitenvariablen. Ein freezed build rendert daraus fertiges HTML samt Assets in den public-Ordner. Keine Datenbank, keine Runtime, kein Applikationsserver. Das Ergebnis läuft auf normalem Webspace genauso wie auf einem Static Host oder hinter einem CDN.

Fluid, aber ohne TYPO3

Statische Site-Generatoren gibt es viele. Fast alle kommen aus dem JavaScript-, Go- oder Ruby-Umfeld und bringen ihre eigene Template-Sprache mit, die man erst lernen muss. Freezed ist in PHP geschrieben (ab 8.2), wird per Composer installiert und rendert mit TYPO3 Fluid. Wer TYPO3-Projekte umsetzt, kennt damit bereits alles: Layouts, Partials, Sections, ViewHelpers. Vorhandenes Fluid-Wissen lässt sich direkt weiterverwenden, eigene ViewHelper eingeschlossen.

Themes zum Stapeln

Das Theme-System funktioniert wie Child-Themes, erlaubt aber beliebig viele Ebenen. Alle Ordner unter themes/ sind gleichzeitig aktiv, später einsortierte überschreiben frühere, daher die Namen 00_default und 10_brand. Überschrieben wird pro Datei: Ein einzelnes Partial wandert als Kopie ins höhere Theme, alles andere kommt aus der Basis. Der resource-ViewHelper löst auch Assets über diesen Stack auf, und Build-Hooks führen vor und nach dem Rendering Shell-Kommandos aus, etwa einen CSS-Build.

Einmal einfrieren, für immer laufen

Daher auch der Name: Eine Website, die fertig ist, wird eingefroren. Statisches HTML bleibt online, solange der Server läuft. PHP-Versionssprünge und Server-Upgrades übersteht es, ohne dass jemand eingreifen muss. Eine mit Freezed gebaute Seite liegt als Sammlung von Dateien auf dem Server und tut dort in zehn Jahren noch exakt dasselbe wie am ersten Tag. Für Auftraggeber bedeutet das: Seiten, die sich nicht ändern, verursachen auch keine Wartungskosten. Und wenn sich doch etwas ändert, wird neu gebaut und deployt.

Status

Freezed ist Beta. Die Build-Pipeline ist stabil, an der API kann sich noch etwas ändern. Lizenz: GPL-2.0-or-later. Der schnellste Einstieg führt über das Skeleton-Projekt:

Terminal
composer create-project --stability=beta neuedaten/freezed-skeleton my-site
cd my-site
./vendor/bin/freezed build