Kirby - das CMS ohne Datenbank

Profilbild von Florian Schmidt
Vom 4. April 2016

Content-Management-Systeme gibt es viele im Internet, die meisten davon basieren auf einer Datenbank. Auch das beliebteste, Wordpress, welches wir hier auf dem Blog bis vor kurzem selbst genutzt haben, basiert auf einer Datenbank. Es gibt aber auch Alternativen ohne Datenbank - und gute Gründe diese zu nutzen. Eine davon ist Kirby, welches inzwischen selbst hier auf dem Blog zum Einsatz kommt. Wir wollen es einmal kurz vorstellen.

Dieser Artikel wurde zuletzt vor über einem Jahr aktualisiert. Die Inhalte könnten inzwischen nicht mehr aktuell sein.

Kirby macht einiges anders als viele andere bekannte CMS, allen voran Wordpress. Der größte Unterschied ist dabei aber natürlich der Verzicht auf eine Datenbank. Doch was heißt das konkret für meine Inhalte? Irgendwo müssen die ja gespeichert werden?!

Um mit Kirby anzufangen reicht es, das Starterpaket von Kirby herunterzuladen und auf einen PHP-fähigen Webserver zu entpacken.

Kirby kostet für den Betrieb von privaten Webseiten 15€, für kommerzielle Seiten 79€. Der Entwickler (übrigens ein Mannheimer) selbst sagt aber, dass er lieber seine Zeit in die Entwicklung neuer Features steckt als in die Verfolgung nicht bezahlter Kirbylizenzen. Ausprobieren kannst du Kirby auch ohne zu bezahlen, nur für die fertige Website sollte dann die Lizenz gekauft werden.

Inhalte

Bei Kirby werden alle Daten in Textdokumenten mit der Endung .txt gespeichert. Diese haben alle einen ähnlichen Aufbau, der von der Struktur her ziemlich einfach ist. Sämtliche "Felder", also verschiedene Inhalte, werden in einzelnen Abschnitten gespeichert, die durch vier Bindestriche miteinander getrennt sind und durch ein einführendes Keyword benannnt wurden. Die Inhalte sind dabei beliebig, das kann von Titel und Inhalt eines Artikels über das Datum einer Veranstaltung bis hin zur Quadratmetergröße einer Immobilie alles sein. Durch diese Flexibilität ist Kirby also für sehr viele verschiedene Einsatzzwecke nutzbar.

Die einzelnen Inhalte können dann mit Kirbytext, eine Erweiterung von Markdown, formatiert werden. Die Inhalte sind also prinzipiell Markdown-formatiert, können aber mit verschiedenen sogenannten Kirbytags zusätzlich befüllt werden. Die Kirbytags gleichen den Shortcodes, die man aus Wordpress kennt, und werden in einem einfachen Fall zum Beispiel so formatiert: (ama​zon: B00VL55Q8O). In diesem Fall handelt es sich hier um mein selbstgeschriebenes Amazon-Plugin, zu dem ich auch noch einen eigenen Beitrag veröffentlichen werde. Mittels dem amazon: wird hier erkannt, dass es sich um den Amazon-Kirbytag handelt, dem entsprechenden Tag wird dann B00VL55Q8O als Inhalt übermittelt, der dann in diesem Falle die entsprechenenden Informationen zum Produkt lädt und in den Beitrag einfügt. Natürlich gibt es auch vorgefertigte Kirbytags, beispielsweise (ima​ge: bild.jpg), mit dem sich Bilder in den Text einfügen lassen.

Ein bespielhaftes Textdokument für einen einfachen Blogbeitrag sähe dann also so aus:

title: Blogbeitrag

---- 

text: Das hier ist der Text zu einem neuen Blogbeitrag. Er ist mit Markdown formatiert und kann zum Beispiel ein Bild enthalten:
(ima​ge: bild.jpg)

----

veröffentlicht: 2016-04-01 13:37:00

Struktur

Nun haben wir also den Inhalt von unserem beispielhaften Blogbeitrag und wissen, dass er als .txt gespeichert werden muss. Doch können wir uns hier nicht einen beliebigen Namen für ausdenken. Der Name des Dokumentes ist später nämlich wichtig, er dient dazu, das korrekte Template auszuwählen. In unserem Falle wäre zum Beispiel artikel.txt sinnvoll.

Dieser Artikel wird nun in einem Unterordner des content-Ordners von Kirby gespeichert. Und wie du nun vielleicht richtig geraten hast: Alle Inhalte, die in dem content-Ordner von Kirby landen, werden später auch veröffentlicht. Für unseren Beispielartikel erstellen wir noch einen Unterordner, welcher später dann die URI zu unserem Artikel darstellt. Sinnvoll wäre zum Beispiel beispielartikel. Das Textdokument liegt also am Ende unter [kirby-rootfolder]\content\beispielartikel\artikel.txt und wäre dann unter www.domain.de/beispielartikel/ aufrufbar.

Sämtliche anderen, dem Artikel zugehörigen Inhalte, also vor allem Bilder, werden ebenfalls in dem Ordner neben der Textdatei gespeichert. Um Bildern zum Beispiel Untertitel geben zu können, kannst du auch zu den Bildern passende Textdateien ablegen, also zum Beispiel bild.jpg.txt. Die Inhalte daraus lassen sich dann später im Template ebenso einfach ausgeben wie aus dem normalen Inhalt.

Die anderen Ordner in Kirbys Rootstruktur sind auch schnell erklärt: In den assets finden sich alle nötigen Zusatzdateien, welche für die Website nötig sind. Also CSS und JavaScripts, außerdem Bilder und Schriften. Diese lassen sich dann später im Template einfach einbinden.

Unter kirby findet sich das eigentliche System, hier musst du eigentlich nie einen Blick reinwerfen.

Das panel ist das optionale Backend, welches über den Browser aufrufbar ist und mit dem du dann deine Inhalte bearbeiten kannst, ohne auf dem eigentlichen Dateisystem herumzufummeln. Gerade für Kunden ist dies eine deutliche Erleichterung. Unter deiner Website ist das Panel unter www.domain.de/panel erreichbar, allerdings lässt es sich auch beliebig umbenennen und ist dann unter dieser Adresse erreichbar.

In den thumbs werden alle generierten Thumbnails von den verwendeten Bildern gespeichert, auch hier musst du eigentlich nie herein gucken.

Unter site finden sich dann alle Einstellungen, Templates, Plugins und ähnliches. Hier lohnt sich ein genauerer Blick drauf: Die accounts enthalten alle Nutzeraccounts, die für Frontend und Panel verfügbar sind. Die blueprints sind die Vorlagen der einzelnen Templates für das Panel, also welche Felder es im Panel für welchen Inhaltstypen gibt.

Der cache wird automatisch generiert, hier kannst du deine Finger ebenfalls von lassen. Wichtig ist aber der config-Ordner, hier werden alle grundlegenden Einstellungen für deine Kirby-Installation vorgenommen. Viele sind das allerdings nicht.

Die controllers und fields werden erst für tiefergehende Seiten wichtig, deswegen lasse ich sie hier einfach mal Weg. Die plugins enthalten - obviously - alle "installierten" Plugins. Das Installiert steht hier in Anführungszeichen, da die Installation denkbar einfach ist: Einfach das Plugin in den Ordner schubsen, fertig. Unter getkirby-plugins.com gibt es übrigens eine schöne Übersicht über alle verfügbaren Plugins. Und ja, diese Liste ist längst nicht so groß wie die von Wordpress. Dies liegt allerdings daran, dass man bei Kirby nicht für jeden Scheiß ein Plugin benötigt, wie bei Wordpress. Die meisten Sachen lassen sich im Template oder an anderer Stelle mit nur wenigen Zeilen Code selbst basteln oder sind aufgrund der Grundkonzeption von Kirby gar nicht erst nötig.

Bei den snippets handelt es sich um den Ordner, der alle wiederkehrenden Elemente der Templates enthält, also beispielsweise Header, Footer und Sidebar. Die tags enthalten alle zusätzlichen selbsterstellten Kirbytags. Last but not least gibt es den templates-Ordner, der alle Templates enthält.

Templates

Nachdem wir alle Inhalte erstellt haben und diese auch in der Struktur korrekt abgelegt haben, bleibt die abschließende Frage: Wie kommen die Inhalte dynamisch auf meine Website? Genau dafür sind die Templates da, welche allerdings keine Erfindung von Kirby, sondern Grundprinzip aller CMS sind.

Es handelt sich hierbei um Grundgerüste in HTML, in welche dann mittels PHP automatisch (je nach angeforderter Seite) die Inhalte eingefügt werden. Bei Kirby ist das Erstellen des Templates ausgesprochen einfach, wie ich finde, im Vergleich beispielsweise zu Wordpress.

Das Template wird anhand des Dateinames des Textdokumentes der entsprechenden URI ausgewählt - in unserem Beispiel von oben wäre das also das Artikel-Template, welches auch artikel.php heißen muss. In diesem Template kann nun beliebiger HTML-Text stehen, der beim Aufruf ausgeliefert wird. Um nun dynamisch die Inhalte aus der Textdatei ausliefern zu können, stellt uns Kirby im Grunde zwei Variablen zur Verfügung, mit der wir Arbeiten: $site und $page. Die site-Variable enthält dabei sämtliche Inhalte aller Seiten, die page-Variable die Inhalte der aktuell aufgerufenen Seite. Theoretisch ist die page-Variable auch nur eine Vereinfachung, da genau der gleiche Inhalt auch mittels $site->find('beispielartikel') erreichbar wäre.

Um nun den Titel dynamisch auszuliefern, reicht es aus, an entsprechender Stelle folgenden PHP-Code einzubinden: <?php echo $page->title() ?>. Damit wird aus der aktuellen Seite der Inhalt ausgeliefert, der sich hinter dem title-Attribut in der Textdatei verbirgt. Der Text lässt sich ebenso einfach ausgeben: <?= $page->text()->kirbytext() ?>. Wie du sicher gesehen hast, verwende ich hier <?= als Shorthand für <?php echo. Das ->kirbytext() ist an der Stelle wichtig, damit der Text auch als Kirbytext formatiert ausgegeben werden kann - also sowohl die Markdown-Syntax beachtet wird, als auch die vorhandenen Kirbytags mit ausgegeben werden. Das Datum lässt sich auch einfach ausgeben: <?= strftime("%e. %B", strtotime($page->veröffentlicht())) ?>. Et voilà, du hast nun dein erstes funktionierendes Template für deinen eigenen Blog! Das ganze kann jetzt natürlich noch ordentlich ausgebaut werden.

Vorteile von Kirby

Wie Kirby vom Grundprinzip her funktioniert weißt du nun - doch warum solltest du ausgerechnet Kirby einsetzen und nicht beispielsweise voll auf Wordpress setzen, welches ja bereits eine große Community hat und noch dazu kostenlos ist?

Nun, ich denke nicht, dass es im Zweifel an 15€ Lizenzkosten fürs Kirby scheitern wird. Wenn doch, hast du ein falsches Verständnis vom Internet.

Weiterhin hat Kirby wirklich eine ausgesprochen gute und vor allem Übersichtliche Dokumentation, welche du hier finden kannst. Neben Tipps und Erklärungen zu den einzelnen Funktionen, welche besonders beim ersten Kontakt mit Kirby nützlich sind, kann ich vor allem das Cheatsheet empfehlen, welches bei mir während der Entwicklung immer offen ist. Hier ist übersichtlich jeder Befehl aufgelistet, durch einfaches Suchen auf der Seite komme ich eigentlich immer zur gewünschten Funktion. Generell macht das Entwickeln mit Kirby ausgesprochen viel Spaß, sobald man einmal das Prinzip verstanden hat.

Solltest du doch einmal etwas nicht im Cheatsheet finden, hilft das Forum sehr weiter. Hier wird eigentlich für jedes Problem eine Lösung gefunden, meist auch innerhalb von 24 Stunden.

Da bei jedem Aufruf einer Seite die Abfrage der Datenbank weg fällt, hat Kirby schon einmal einen prinzipiellen Geschwindigkeitsvorteil. Weiterhin ist Kirby selbst sehr schlank gehalten und es gibt keine Plugins, die die Geschwindigkeit vom System stark ausbremsen, ganz im Gegenteil zu einem wenig optimierten Wordpress. Außerdem unterstützt Kirby von Haus aus Caching, welches nochmals einen Geschwindigkeitsvorteil bringt. Seit dem Umstieg von Wordpress auf Kirby ist netzleben deutlich schneller geworden, mit Auslieferungszeiten von unter einer Sekunde. Vorher dauerte die Auslieferung bis zu sechs Sekunden (okay, das lag aber auch an vielen eingebundenen externen Dokumenten, aber war dennoch langsam).

Auch ist Kirby prinzipbedingt ziemlich sicher gegenüber Hackerattacken, solange man das Panel nicht nutzt. Denn es gibt von Haus aus keine Möglichkeiten, Inhalte zu schreiben, außer über das Dateisystem - das setzt eigentlich allen Angriffsvektoren, die über die Website selbst gehen, einen Riegel vor. Sobald das Panel genutzt wird, ist dieser Weg natürlich prinzipiell offen, da es von sich aus Schreibfunktionen auf das Dateisystem bietet. Allerdings gibt es historisch gesehen längst nicht so viele offene Lücken bei Kirby wie bei Wordpress (wobei letztere meist auf schlecht entwickelte Plugins zurückzuführen sind).

Nachteile von Kirby

Natürlich gibt es auch bei Kirby Nachteile, das will ich gar nicht verschweigen.

Kirby ist kein "Einfach schnell eine Website zusammen basteln"-System. Es gibt bisher nur sehr wenige vorgefertigte Themes, eigentlich muss für jede Seite selbst ein Template entwickelt werden. Allerdings ist die Seite dadurch auch perfekt an die Bedürfnisse angepasst.

Die Community ist außerdem noch relativ klein. Es gibt zwar das Forum und eine sehr gute Dokumentation, allerdings gibt es sicherlich viele Spezialprobleme, zu denen bisher noch keine Lösung dokumentiert wurde. Bei Wordpress gibt es eigentlich zu jedem Problem bereits eine Lösung, man muss sie nur richtig ergooglen können.

Zu guter Letzt gibt es einige Funktionen, die noch nicht für Kirby entwickelt wurden, welche Standardfeatures bei Wordpress sind. Allen voran steht dabei das Rechtemanagement. Bei Kirby ist es aktuell so, dass man entweder kompletten Zugriff auf das Panel hat oder eben nicht. Ein abgestuftes Rechtesystem ist aktuell in Entwicklung, momentan müsste man sich über eine selbst gebastelte Lösung auf dem Frontend begnügen. Außerdem fehlt von Haus aus eine Kommentarfunktion für Artikel. Allerdings habe ich hier bereits eine Lösung selbst entwickelt. Diese ist nicht ganz so umfangreich, reicht allerdings für die Basics aus. Ich werde sie natürlich in einem zukünftigen Artikel ausführlich euch zur Verfügung stellen.

Fazit

Kirby ist dank seiner unglaublichen Flexibilität eigentlich für fast jede Art von Website geeignet. Ob es nun ein One-Pager ist, ein Blog oder eine Ticket-Buchungs-Seite - mit Kirby sind alle diese Anwendungsfälle machbar. Die Entwicklung ist dabei sehr einfach, wenn man das Prinzip einmal verstanden hat. Allerdings musst du dir natürlich auch bewusst sein, dass es mit Kirby deutlich mehr als eine Stunde Aufwand ist, bis die Seite läuft, und du gewisse Fähigkeiten im Programmieren brauchst, da es nicht für jede Kleinigkeit ein Plugin gibt.

Wenn du also selbst Entwickler bist, kann ich dir nur empfehlen, einmal einen Blick auf Kirby zu werfen, zumal das reine Ausprobieren keine Lizenz benötigt. Wenn du dir nur schnell eine Website zusammen klicken willst, kannst du ruhig weiter bei Wordpress bleiben - solange, bis es dich genauso aufregt wie mich damals und du dich zum Wechsel entschließt ;-)

  • # Kirby
  • # WordPress
  • # CMS
  • # Webentwicklung
  • # Blog

Du suchst die Kommentare?

Keine Sorge, die sind nicht verloren! Es dauert aber noch eine Weile, bis sie wieder zu sehen sind und du neue Kommentare hinterlassen kannst.

Netzleben ist frisch von einer alten Kirby-Website auf eine neue, Statamic-basierte Website umgezogen. Leider ist das Plugin für Kommentare mit Statamic 3 noch nicht kompatibel.