Cyrax
Cyrax ist ein statischer Webseitengenerator. Es hat sehr starke Ähnlichkeiten zu Hyde oder Jekyll, ist aber im Gegensatz zu diesen ziemlich schlank und hat deutlich weniger Abhängikeiten. Cyrax benutzt die Template-Engine Jinja2. Es können aber unter anderem weitere Markup-Sprachen wie Markdown, Rst oder Textile verwendet werden.
Um in Cyrax ein Website zu generieren, müssen sogenannte Models angelegt werden. Es gibt in Cyrax vier Models: Post, Tag, Page und NonHTML. Beim Generieren der Website durchläuft Cyrax das Verzeichnis und versucht jede Datei einem Model zuzuweisen. In jener Reihenfolge wird überprüft ob die Datei den Modelanforderungen entspricht. Ausgenommen beim traversieren sind unsichtbare Dateien, sowie Dateien die mit einem Unterstrich anfangen.
Post
Ein Post zeichnet sich dadurch aus, dass im Pfad ein Datum vorkommt. Dies kann entweder in Form von Bindestrichen oder durch Ordnerhierachien geschehen. Der genaue Regex hierfür ist der folgende
(.*?)(\d+)[/-](\d+)[/-](\d+)[/-](.*)$
Beispiele:
- blog/2012/05/15/my-awesome-post.html
- 2012/05/15/my-awesome-post.html
- 2012/05-15-my-awesome-post.html
- 2012-05-15-my-awesome-post.html
Die Besonderheit von Posts ist, dass es ein Datum anhand des Pfades hat und es daran auch intern sortiert wird. Desweiteren können Posts mit Tags versehen werden.
Tag
Page
Pages sind normale statische Html-Seiten. Erkannt werden diese durch die html-Dateiendung.
NonHTML
NonHTML ist das Gegenstück zur Page. Eine Datei wird genau dann diesem Model zugewiesen, wenn es nicht auf html im Namen endet. Sinnvoll zum Beispiel für Atom-Feeds oder ähnliches.
Auf alle Models kann über das Site-Object in Jinja2-Templates zugegriffen werden.
- Beispiel für Pages
{% for page in site.pages %} {{page.title}} {% endfor %}
Damit mit Cyrux eine statische Website generiert werden kann, müssen folgende Dateien vorhanden sein:
settings.cfg - Konfigurationsdateibeispiel
author: Spline title: Spline url: http://www.spline.de/
_base.html - Basislayoutbeispiel
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>{{ site.title }}{% block title %}: {{ entry.title }}{% endblock %}</title> </head> <body> <!-- Beispielmenüleite --> <ol> {% for page in site.pages%} <li><a href="{{page.get_url()}}">{{page.title}}</a></li> {% endfor %} </ol> {% block content %}{% endblock %} </div> </body> </html>