Sidequests
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.
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.
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.
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.
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.
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:
composer create-project --stability=beta neuedaten/freezed-skeleton my-site
cd my-site
./vendor/bin/freezed build
Alles Weitere steht in der Dokumentation: