PureWiki verwendet ein einfaches, PHP-basiertes Templating-System für das Rendering des öffentlichen Frontends. Dieses System legt Wert auf Einfachheit und Leistung gegenüber komplexen Template-Sprachen wie Twig oder Blade.

Architektur

Themes befinden sich im Verzeichnis themes/. Die zentrale Layout-Datei heißt immer page.php.

Verzeichnisstruktur

themes/default/
├── page.php          # Main layout file
├── other-layout.php  # Optional: further layouts, selectable per page
├── elements/         # Reusable HTML snippets
│   ├── header.php
│   ├── content.php
│   └── footer.php
├── style.css         # Stylesheet
├── script.js         # Theme script
└── theme.json        # Optional: adjustable theme colors
Leistungs-Tipp:
Verwende beim Einbinden statischer Snippets wie header.php den Befehl echo file_get_contents(__DIR__ . '/path'), um den PHP-Parsing-Overhead zu minimieren.

Platzhalter und Variablen

Platzhalter werden durch {{ variablen_name }} gekennzeichnet. Der Renderer ersetzt diese während des Build-Prozesses.

Verfügbare Systemvariablen

Bedingte Logik

Der Renderer unterstützt einfache {{ if variable }} und {{ endif }} Blöcke.

{{ if show_left_sidebar }}
  <aside>
    {{ virtual:left_sidebar }}
  </aside>
{{ endif }}

Virtuelle Seiten und Makros

Themes verlassen sich auf Virtuelle Seiten ({{ virtual:name }}) für globale Inhalte und Makros ({{ macro:name }}) für dynamische Logik wie Suche oder Navigation.

Layout-Vorlagen

Neben der page.php kann ein Theme weitere Layout-Dateien enthalten. Die Einstellung Layout-Vorlage einer Seite wählt die Datei über ihren Namen, siehe Seiteneinstellungen. Existiert die Datei nicht, wird die page.php verwendet.

Theme-Farben

Ein Theme kann Farben anbieten, die Administratoren unter Globale Einstellungen > Darstellung > Theme-Farben ändern, getrennt für hellen und dunklen Modus. Die Farben werden in der theme.json deklariert:

{
    "colors": {
        "--pw-primary": {
            "label": "settings.theme_color_primary",
            "light": "#0172ad",
            "dark": "#3fa9dd"
        }
    }
}

Für jede Farbe, die vom Standard abweicht, fügt PureWiki eine Überschreibung in den Head ein, zum Beispiel :root{--pw-primary:light-dark(#ff0000,#ff4242)}. Das Stylesheet muss daher die Variable verwenden und color-scheme setzen, damit light-dark() funktioniert. Ein Theme ohne theme.json hat keine anpassbaren Farben.

Standard-Theme

Das Standard-Theme ist in reinem CSS ohne Framework geschrieben. Sein Design stammt aus CSS-Variablen in :root. Die anpassbaren Basisfarben sind die Grundlage für abgeleitete Farben, die automatisch mitziehen, wenn sich eine Farbe ändert.

Variable Beschreibung
--pw-primary Akzentfarbe für Buttons, Link-Hover sowie Fokus- und aktive Zustände. Anpassbar.
--pw-bg / --pw-fg Hintergrund- und Textfarbe. Anpassbar.
--pw-surface, --pw-border, --pw-muted Aus Hintergrund und Text abgeleitet.
--pw-color-info, -success, -warning, -important Statusfarben für Callouts und Meldungen.
--pw-radius, --pw-spacing, --pw-container-width, --pw-header-height Form und Layout.
--pw-font-sans, --pw-font-mono Schriftarten.

Heller und dunkler Modus verwenden light-dark(). Ohne Auswahl folgt das Theme der Systemeinstellung. Der Schalter in der Kopfzeile setzt data-theme="light" oder data-theme="dark" auf dem <html>-Element und speichert die Auswahl im Browser. Eigenes CSS und Landingpages können dieselben Variablen nutzen.

Minifizierte Dateien:
Das Standard-Theme lädt style.min.css und script.min.js. Es gibt keinen Build-Schritt. Erzeuge die minifizierten Dateien nach Änderungen an style.css oder script.js mit einem Minifier deiner Wahl.
Bisheriges Standard-Theme:
Das frühere PicoCSS-basierte Theme ist weiterhin als default_picocss verfügbar und lässt sich unter Globale Einstellungen > Darstellung auswählen.