Grundidee: Vue.js Backend (Admin- / Redaktionsbereich) mit Login per JWT. Dort werden die Seiten erstellt bzw. bearbeitet und die Einstellungen für die Webseite geändert. Diese Daten werden als Dateien (flat cms) abgelegt (JSON-basiert).
Anschließend (und bei jeder Änderung) wird che
aufgerufen, ein in Python geschriebenes Build-Skript (inkrementell), welches dann aus den JSON-Daten und den festgelegten HTML-Templates statische Webseiten mit intelligenter Verlinkung erzeugt.
Jede Seite erhält dabei eine eindeutige ID, welche in den Unterseiten referenziert werden kann (Verlinkungen). Bei einer Änderung des Seitentitels etc. wird aber die Referenz nicht aufgelöst, aber die referenzierenden Seiten müssen durch den intelligenten Builder neu gebaut werden (Klartext-URLs in Links etc).
Für jede Webseite können beliebig viele Templates angelegt werden. Jeder Unterseite kann dann ein Template zugewiesen werden.
Die Templates basieren auf Jinja2
.
- Markdown als Formatierungssprache im Frontend (-> Converter!)
- Automatische Keyword- und Meta-Generierung durch NLTK aus dem Fließtext der Unterseiten (SEO!)
- i18n
- Automatische Auflösung von Seitenreferenzen und Assets (Bilder, etc.)
- automatische robots.txt
- automatische sitemap
- automatische 404
- Erzeugen von Navigation, Menus etc. aus Seiten
- Footer, Header
- Zusammenführen von Template-Flicken (partials)
Für die Webseite werden folgende Daten gespeichert:
- URL
- Default-Sprache
- Mehrsprachigkeit (i18n)
- Datumsformat, Zeitzone etc.
- Spezielle Build-Parameter etc.
User und Passwörter etc. werden nicht beim Site Generator gespeichert - dieser nimmt nur die erzeugten Daten an und erstellt daraus die Webseite (plain HTML + JS). Für die Verwaltung der User und der Unterseiten wird ein (Vue.js)-Frontend verwendet.
Pages speichern folgende Metadaten:
- Title (page title)
- Slug (URL, autogeneriert aus title mit automatischen Regeln, bzw. freie Einggabe)
- ID (page identifier, eindeutig, ändert sich nach Erstellen nie mehr!)
- Created (timestamp)
- Modified (timestamp)
- Version (für inkrementellen Builder)
- template (Verweis auf Template-ID oder File)
- hidden, private
- Published, Draft
- use_nlp (use natural language processing, z.B. autom. Keyword- und Satzextrahierung)
Die Metadaten werden pro Seite als .json
-Datei gespeichert, während die eigentlichen Markdown-Daten als <seite_id>.md
gespeichert sind.
Dem Build-Prozess sollte eigene Middleware (plugins) zwischengeschaltet werden können. So könnte ein eigenes Template-Tag galerie
eingeführt werden, welches dann durch eine Middleware in ein fertiges HTMl-Galerie-Konstrukt überführt werden kann.
-
Einlesen der Seiten (
<meta>.json
und<seite>.md
) sowie der Einstellungen (.json
) -
Der inkrementelle (intelligente) Builder baut nur Seiten, die sich verändert haben, oder bei denen sich Referenzen geändert haben. Dazu muss er über alle Dateien ein kleines Logbuch führen (json-basiert).
{ 'ueber_uns_3b4f8cc': { 'version': '02', 'last_modified': '207482221' } }
-
Laden der verwendeten Templates
-
Laden der Metadaten pro Seite
-
Einfügen der Metadaten in die Jinja-Env
-
Middleware ausführen
-
Automatische Keyword- und Metainformationen in Jinja-Env (SEO)
-
Markdown-Converter -> Output in Jinja-Env
-
Referenzen (Links, Bilder) auflösen (aus IDs werden Klartexturls z.B. /ueber-uns)
-
Logbuch aktualisieren
-
Nachdem alle Einzelseiten generiert wurden:
-
Sitemap generieren
-
Navigation und Menü generieren
-
robots.txt generieren