kirby-CMS
rein textbasiert und ohne Datenbank
Kirby ist ein sogenanntes file-based – oder auch flat file – Content-Management-System. Das bedeutet, dass Sie im Gegensatz zu vielen anderen bekannten CMS keine Datenbank benötigen. Alle Informationen liegen in Ordnern und Dateien vor. Ursprünglich wurde Kirby allein von Bastian Allgeier entwickelt. Mittlerweile besteht das Kern-Team aus fünf Leuten. Dazu kommen eine Menge weiterer Entwickler, die mit Plug-ins, Übersetzungen oder Tests zum Projekt beitragen. Am 15. Januar 2019 ist Version 3 von Kirby erschienen und bietet zahlreiche neue Features ( getkirby.com). Kirbys Quellcode ist zwar auf GitHub öffentlich zugänglich, aber das CMS ist nicht kostenlos. Sie können Kirby herunterladen und lokal ausprobieren. Wenn Sie die fertige Website aber ins Netz stellen möchten, benötigen Sie eine Lizenz. Aktuell kostet diese 99 Euro (plus Mehrwertsteuer) pro Website. Ein sehr fairer Preis, denn schließlich soll das Entwicklerteam ja auch von seiner Arbeit an dem System leben können.
Das Starterkit
Sie können zwei verschiedene Versionen von Kirby herunterladen. Das Starterkit enthält eine Website mit Demo-Inhalten. Diese Version bietet sich an, wenn Sie noch nie mit Kirby gearbeitet haben. Daneben gibt es auch ein Plainkit, das eine minimale Kirby-Installation beinhaltet. Hierbei bauen Sie Ihre Website weitgehend von Null auf. Am besten testen Sie zunächst das Starterkit lokal auf Ihrem eigenen Rechner. Sie könnten das Kit auch auf einem öffentlichen Server installieren – dann können Sie sich zwar die Website ansehen, aber das Panel zur Bearbeitung der Website (siehe weiter unten) wird nicht funktionieren. Um sich alle Bereiche anzusehen, benötigen Sie also einen lokalen Webserver mit PHP, wie etwa das bekannte XAMPP. Entpacken Sie das Starterkit in den richtigen Ordner, bei XAMPP also in einen neuen Ordner /kirby innerhalb von /xampp/htdocs, und starten Sie den Webserver. Nun können Sie die
Beispiel-Website im Browser unter localhost/kirby aufrufen und sehen ein kleines Fotografie-Magazin.
Die Ordnerstruktur
Werfen wir zunächst einen Blick auf die Ordnerstruktur. Das Plainkit enthält die folgenden Ordner: content: Dieser Ordner enthält die Inhalte für Ihre Website. kirby: Hier liegt die Kirby-App, das eigentliche CMS. Diesen Ordner lassen Sie am besten in Ruhe. Wenn Sie später ein Update installieren möchten, tauschen Sie einfach diesen Ordner aus. media: In diesem Ordner speichert Kirby öffentliche Bilder, Thumbnails sowie Plugin- und Panel-Assets. Auch diesen Ordner lassen Sie am besten unangetastet. site: Dieser Ordner enthält Templates und Snippets für Ihr Theme, Konfigurationen, Plug-ins und Blueprints für das Panel. Das Starterkit enthält noch einen zusätzlichen Ordner: assets: Hier finden Sie ein paar CSS-Dateien für das Projekt. Dieser Ordner ist nicht zwingend erforderlich, er folgt lediglich einer üblichen Aufteilung in Kirby.
Inhalte und Templates
Die Inhalte einer einzelnen Webseite bestehen erst einmal aus einer Textdatei in einem Ordner innerhalb von /content. Wenn dort etwa ein Ordner /notes existiert mit der Datei notes.txt, dann ist diese Webseite unter der URL /notes erreichbar. Ein Unterordner /exploring-theuniverse unterhalb von /notes erhält die URL /notes/exploring-the-universe. Im Starterkit haben die Ordner zusätzlich noch Nummern, also /2_notes und /20181031_exploring-the-universe. Damit können Sie Ihre Inhalte sortieren; die Nummern werden aber nicht für die URLs genutzt. Anhand dieser Zahlen können Sie zum Beispiel die Reihenfolge für ein Menü festlegen. Entwürfe werden in einem Unterordner _drafts gespeichert, der nicht zugänglich ist, wenn Sie nicht angemeldet sind. Woher weiß Kirby nun, welches HTML angezeigt werden soll, wenn eine bestimmte URL aufgerufen wird? Nehmen wir an, in einem Ordner /datenschutz liegt die folgende Datei datenschutz.txt. Title: Datenschutz ---Text: Umfassende Informationen zum Datenschutz. Hier nur angedeutet. Wenn die Textdatei ausgewertet werden soll, sucht Kirby im Ordner /sites/templates nach einer PHP-Datei mit dem Namen datenschutz.php. Falls diese nicht existiert, nutzt Kirby als Fallback die Datei default. php. Diese hat im Plainkit folgenden Inhalt: <h1><?php echo $page->title()->html() ?></h1> Das lässt sich recht einfach lesen: Das Objekt $page enthält immer die Daten der aktuellen Seite. Über title() lesen Sie den Text aus dem Title der datenschutz.txt aus. Und mit html() werden zusätzlich noch Sonderzeichen kodiert. Möchten Sie auch den Text aus datenschutz.txt ausgeben, ergänzen Sie im Template einfach eine Zeile. <?php echo $page->text() ?> Sie können in der Textdatei beliebige Texte ergänzen, die jeweils mit vier Minuszeichen voneinander getrennt werden. Dies entspricht verschiedenen Feldern, auf die Sie einzeln zugreifen können. Sie müssen bei den Feldnamen darauf achten, dass Sie nur alphanumerische Zeichen und Underscores benutzen. Außerdem gibt es Konflikte, wenn Sie Namen benutzen, die Kirby für bestehende Methoden nutzt. Der Name image kollidiert mit der Methode $page->image(). In solchen Fällen ist es am einfachsten, einen anderen Namen zu wählen. Wenn Sie trotzdem den Namen image verwenden wollen, bietet Kirby Möglichkeiten, um auf den Inhalt solcher Felder zuzugreifen. Bei dieser Arbeitsweise können Sie schon erkennen, dass das HTML im Gegensatz zu einigen anderen CMS ganz genau so ausgeliefert wird, wie Sie es benötigen. Es gibt keine unerwünschten divs oder Klassen.
Dateien
Dateien werden direkt in dem passenden Ordner gespeichert; dort wo auch die Textdatei liegt, zu der die Dateien gehören. Kirby unterstützt verschiedene Dateitypen: Bilder, Dokumente, Audio, Video, Code (etwa css oder js) und Archive (etwa tar, zip, gzip). Zu jeder Art von Datei stellt Kirby eine Reihe von Methoden zur Verfügung, etwa $page->images() oder $page->videos(). Über das Objekt $page können Sie auf die jeweiligen Bilder zugreifen. Um ein konkretes Bild anzusprechen, nutzen Sie: <?= $site->image('beispiel.jpg') ?> Um alle Bilder einer Seite abzurufen, reicht eine simple foreach-Schleife: <?php foreach($page->images() as $i): ?>
<img src="<?= $i->url() ?>"> <?php endforeach ?> Allgemeine Dateien, etwa ein Logo oder ein Favicon für die Website, können Sie auf der obersten Ebene speichern, also direkt im Ordner /content. Die Dateien auf dieser Ebene erreichen Sie über das Objekt $site. Um zum Beispiel das Logo logo.png der Website in ein Template einzubauen, können Sie es direkt über $site ansprechen: <a id="logo" href="<?= $site->url() ?>"><?= $site->image('logo.png') ?></a> Metadaten für eine Datei können Sie leicht in einer zusätzlichen Textdatei speichern. Für eine Bild team.jpg wäre das entsprechende File mit den Metadaten: team.jpg. txt. In dieser Datei können Sie analog zu den eigentlichen Inhalten beliebige Felder festlegen, die sich dann leicht über Kirbys vorhandene Methoden auslesen lassen.
Snippets
Meisten nutzen Sie für verschiedene Inhalte Ihrer Website unterschiedliche Templates. Etwa die Startseite, Blogposts, Termine oder allgemeine Seiten wie das Impressum. Die einzelnen Inhalte sind zwar unterschiedlich, aber Bereiche wie der Header oder Footer sind in der Regel gleich. Gleichen Code lagern Sie am besten in Snippets aus. Dazu legen Sie etwa die Dateien header. php und footer.php im Ordner /site/snippets an. Diese Snippets können Sie dann bequem in den einzelnen Templates aufrufen: <?php snippet('header') ?> <?php snippet(footer) ?>
Inhalte zusammensuchen
Nun basiert Kirby zwar auf einzelnen Seiten; an bestimmten Stellen brauchen Sie aber vielleicht Informationen aus mehreren Unterseiten. Etwa, um auf der Startseite eines Blogs die Teaser der letzten Blogbeiträge anzuzeigen. Ein konkretes Beispiel dafür finden Sie im Starterkit unter der URL /notes. Hier werden alle vorhandenen Notes kurz mit Titel und Datum angeteasert. Den entsprechenden Code finden Sie im Template notes.php, hier etwas verkürzt: <?php foreach ($page->children() ->listed()->sortBy('date', 'desc') as $note): ?> <a href="<?= $note->url() ?>"> <h2><?= $note->title() ?></h2> <time><?= $note->date()
->toDate('d F Y') ?></time> </a> <?php endforeach ?> Ausgehend von der aktuellen Seite ($ page) werden alle Unterordner durchsucht (-> children()). Es werden alle veröffentlichten Notes berücksichtigt (-> listed()) – das sind jene Inhalte, die nicht als Entwurf gespeichert wurden. Diese werden anhand des Feldes Date (eine Angabe innerhalb der
einzelnen Notes-Textdateien) absteigend sortiert. Von all diesen Notes werden nun URL, Title und Date genutzt, um die Inhalte wie gewünscht auszugeben. Kirby bietet jede Menge Methoden, um genau die Inhalte zusammenzusuchen, die Sie gerade brauchen. Da es öfter nötig ist, ähnliche Inhalte zu bündeln, bietet Kirby die Option, sich die Arbeit mit sogenannten Collections zu vereinfachen.
Das Panel & Blueprints
Sie können Ihre Website allein mit einem Texteditor aufbauen und pflegen. Aber in manchen Fällen ist es bequemer, bestimmet Dinge über eine Benutzeroberfläche zu regeln. Dafür gibt es das Panel. Zunächst melden Sie sich über /panel an und legen die Zugangsdaten für Ihren Benutzer fest. Im Panel selbst können Sie bestehende Inhalte oder Metadaten ändern und neue ergänzen. Kirby ändert dann die entsprechenden Textdateien oder legt neue Ordner und Dateien an. Welche Inhalte Sie ändern können, müssen Sie Kirby vorher allerdings mitteilen. Dafür legen Sie Blueprints an, mit denen Sie Kirby etwa sagen, welche Inhalte welche Felder haben. Außerdem können Sie das Layout des Panels umfangreich ändern und auch Tabs ergänzen. Das erlaubt Ihnen, die Benutzeroberfläche sehr kleinteilig auf Ihre Benutzer abzustimmen.
Weitere Funktionen
Dies ist nur ein kleiner Überblick über Kirby. Das CMS bietet eine ganze Reihe weiterer Möglichkeiten. So können Sie etwa Benutzer mit verschiedenen Rechten anlegen, Mehrsprachigkeit ist bereits im Core integriert, und Webentwickler können mit der API, Controllern und Routing herumspielen. Bei üblichen Anforderungen wie Sitemap, Pagination oder einer Suche finden Sie Lösungen im Cookbook. Für ein Kontaktformular gibt es im Netz eine Lösung von Kirby-Entwickler Bastian Allgeier. In einer der nächsten Ausgaben des PC Magazins finden Sie konkrete Beispiele dazu, wenn es um die Umsetzung eines realen Projektes geht.
Fazit
Kirby ist ein äußerst ansprechendes Content-Management-System, das sich gerade für jene Webworker anbietet, die Wert auf sauberes HTML und CSS legen. Puristen können sich hier austoben und die Website genau so ausliefern, wie sie es haben wollen. Dank der wirklich guten Dokumentation fällt es leicht, sich schnell in das System einzuarbeiten. Ein kleines Projekt lässt sich so in wenigen Stunden auf Kirby migrieren. Dazu können Sie auch noch die Benutzeroberfläche sehr einfach anpassen, was bei bestimmten Projekten und Kunden Gold wert ist. Da macht sich die Investition in die nötige Lizenz schnell bezahlt.