Gesamte Dokumentation

Für Entwickler

Der Entwickler-Leitfaden: Architektur ohne Datenbank, Tests, Archiv, Anpassung des Éclair CMS Themes, Nginx-Konfiguration und Mitarbeit am Projekt.

Aktualisiert am 4 Min. Lesezeit

Inhalt
  1. Wie ist Éclair aufgebaut?
  2. Was enthält der Ordner eclair?
  3. Wie startest du Éclair lokal?
  4. Wie startest du die Tests?
  5. Wie erstellst du ein verteilbares Archiv?
  6. Wie passt du das Éclair CMS Theme an?
  7. Wie lieferst du Éclair mit Nginx aus?
  8. Welche PHP-Versionen und Erweiterungen brauchst du?
  9. Wie kannst du zu Éclair beitragen?
  10. Fragen von Entwicklern

Éclair ist in PHP 8.1 oder neuer geschrieben, ohne Framework und ohne Composer: einfache Klassen in app/lib/, PHP-Views und natives JavaScript. Dieser Leitfaden erklärt die Architektur, wie du die Tests startest und ein Archiv erstellst, wie du das Éclair CMS Theme anpasst, ohne die Sicherheit zu gefährden, und wie du Éclair mit Nginx auslieferst.

Wie ist Éclair aufgebaut?

Drei Ideen machen es leicht und schnell:

  1. Ein Front Controller, der den Cache ausliefert, ohne die Anwendung zu laden. index.php sucht die angeforderte Seite zuerst in cache/pages/ und sendet sie direkt, samt Headern und ETag (Antwort 304, wenn sich nichts geändert hat). Die Anwendung wird nur für eine noch nicht gecachte Seite, den Adminbereich oder die Installation geladen.
  2. Eine flache Speicherung, ohne Datenbank. Jeder Datensatz ist eine .php-Datei, die mit <?php exit; ?> beginnt, gefolgt von JSON. Schreibvorgänge sind atomar (temporäre Datei, dann Umbenennung), privat (0600) und laufen bei Read-Modify-Write-Abläufen unter einer exklusiven Sperre. data/index.php hält eine Zusammenfassung aller Inhalte, um schnell aufzulisten und zu routen.
  3. Blöcke, die validiert und dann gerendert werden. Jeder Block wird validiert und per Allowlist bereinigt, dann als HTML gerendert, für GEO als Markdown exportiert und für SEO analysiert.

Das Ergebnis: ein Archiv von 440 KB, keine Abhängigkeiten und Seiten, die bei unseren lokalen Messungen in 0,7 ms ausgeliefert werden.

Was enthält der Ordner eclair?

eclair/                  ← auf das Hosting hochladen
├── index.php            Front Controller (liefert den Cache aus, ohne die Anwendung zu laden)
├── .htaccess            URL-Rewriting, Schutzregeln, Komprimierung, Browser-Cache
├── app/lib/             Code (Klassen Eclair\…): Content, Blocks, Seo, Analyzer, Media, Auth …
├── app/admin/views/     Bildschirme des Adminbereichs
├── app/theme/           Vorlagen der öffentlichen Website + theme.css (in jede Seite eingefügt)
├── app/lang/            Übersetzungen des Adminbereichs (6 Sprachen, komprimiertes JSON)
├── assets/admin/        CSS und JavaScript des Adminbereichs (keine Abhängigkeiten)
├── assets/site/site.js  das einzige öffentliche Skript (2,4 KB, 1,2 KB komprimiert)
├── data/                Inhalte, Einstellungen, Konten (bei der Installation angelegt, nie öffentlich)
├── cache/               erzeugte Seiten
└── media/               hochgeladene Bilder

Im Repository enthält i18n/ die lesbaren Quellen der Übersetzungen, tests/ die Tests und tools/ den Entwicklungs-Router und das Build-Tool.

Wie startest du Éclair lokal?

Aus dem Repository genügt der eingebaute PHP-Server:

PHP_CLI_SERVER_WORKERS=4 php -S localhost:8000 -t eclair tools/router.php

tools/router.php bildet die Regeln der .htaccess nach. PHP_CLI_SERVER_WORKERS erlaubt es der Website, sich selbst aufzurufen, um ihre Adresse zu prüfen: Mit nur einem Prozess schlägt die Prüfung einfach fehl, und die Weiterleitungen auf die offizielle Adresse bleiben deaktiviert. Für einen Test ohne Kommandozeile siehe Éclair auf deinem Computer ausprobieren.

Wie startest du die Tests?

php tests/run.php          # 502 Unit- und HTTP-Prüfungen
php tests/run.php --unit   # nur Unit-Tests

Die Integrationstests starten einen echten PHP-Server und spielen einen Großteil der Angriffe aus dem Sicherheitsaudit nach. tests/fake-ai.php simuliert die KI-Anbieter (Claude, ChatGPT, Bilder): Der Assistent wird ohne Schlüssel und ohne Kosten getestet.

Wie erstellst du ein verteilbares Archiv?

php tools/build.php

Das Tool kompiliert die Übersetzungen aus i18n/ neu, berechnet den SHA-256-Fingerabdruck jeder Datei in app/manifest.php, der Referenz der Integritätsprüfung, und erstellt dann dist/eclair-cms-<version>.zip mit der Datei LISEZ-MOI, der Lizenz und den Hinweisen zu Drittanbietern.

Wie passt du das Éclair CMS Theme an?

Die öffentliche Website wird von den Vorlagen in app/theme/ gerendert:

DateiAufgabe
layout.phpHaupt-Vorlage: Header, Menü, Footer
single.phpEine Seite oder ein Beitrag
list.phpBlog, Kategorien, Autorenseiten und Suche
cards.phpDas Raster der Beitragskarten
404.phpDie Seite „nicht gefunden“
theme.cssDie Stile, minifiziert und in jede Seite eingefügt

Die Einstellungen unter Design werden zu CSS-Variablen, die dein Theme wiederverwenden kann: --accent, --on-accent, --link, --link-dark, --font und --font-head. Der Dunkelmodus steht zwischen den Kommentaren /*dark*/ und /*/dark*/: Éclair entfernt diesen Block, wenn die Einstellung „Immer hell“ gewählt ist.

Bewahre eine Kopie deiner Vorlagen auf: Die Integritätsprüfung meldet sie als geändert, was normal ist, und ein Éclair-Update ersetzt sie (siehe Aktualisieren). Die Website eclaircms.org, die du gerade liest, ist selbst mit Éclair und einem angepassten Theme gebaut: fixiertes Menü, Dokumentation mit Seitenmenü, vorherige und nächste Seiten.

Wie lieferst du Éclair mit Nginx aus?

Unter Nginx braucht Éclair keine .htaccess, aber du musst diese Regeln nachbilden:

location ~ ^/(app|data|cache)(/|$) { return 404; }
location ~ /\.(?!well-known/) { return 404; }
location ^~ /media/ {
    location ~* \.(php\d?|phtml|phar|s?html?|svgz?|xml|js)$ { return 404; }
    add_header X-Content-Type-Options nosniff;
    expires 1y;
}
location ~* \.(webp|avif|jpe?g|png|gif|ico|css|js|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; }
location / { try_files $uri /index.php$is_args$args; }
location = /index.php {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ \.php$ { return 404; }

Damit die Antworten des KI-Assistenten fortlaufend erscheinen, füge fastcgi_buffering off; in den PHP-Block ein.

Welche PHP-Versionen und Erweiterungen brauchst du?

Éclair läuft mit PHP 8.1 bis 8.5; empfohlen ist 8.3. Die Erweiterungen mbstring, json, dom und session sind unverzichtbar. gd (WebP-Bilder), zip (Backups), curl (IndexNow und KI-Assistent), zlib (übersetzter Adminbereich) und sodium oder openssl (Schlüssel des Assistenten) werden empfohlen. Der Installationsassistent prüft das alles.

Wie kannst du zu Éclair beitragen?

Der Code ist auf GitHub öffentlich: Melde einen Bug oder schlage eine Idee in den Issues vor, oder sende einen Pull Request samt Tests. Éclair wird unter der MIT-Lizenz verbreitet; ein Teil der Icons des Adminbereichs stammt von Lucide, unter der ISC-Lizenz. Du kannst das Projekt auch auf der Seite Spenden unterstützen.

Fragen von Entwicklern

Brauche ich Composer oder Node.js, um an Éclair zu entwickeln?

Nein. Éclair hat keine Abhängigkeiten: PHP 8.1 oder neuer genügt, um die Website, die Tests und das Build-Tool auszuführen.

Kann ich mein eigenes Éclair CMS Theme erstellen?

Ja: Bearbeite die Vorlagen in app/theme und die Datei theme.css. Halte dich an die Sicherheitsrichtlinie (kein Inline-Skript) und bewahre eine Kopie deiner Dateien auf, die ein Update ersetzen würde.

Wo werden die Inhalte gespeichert?

In data/content, eine Datei pro Inhalt, im JSON-Format, dem die Schutzzeile vorangestellt ist. data/index.php hält eine Zusammenfassung davon, um schnell aufzulisten und zu routen.

Wie füge ich eine Übersetzung des Adminbereichs hinzu?

Die lesbaren Quellen liegen im Ordner i18n des Repositorys, wobei der französische Text als Schlüssel dient. tools/i18n.php kompiliert sie zu komprimierten Dateien, und php tools/build.php erledigt das automatisch.