Stand: SB30.89 · 18.09.2026
Klein und schnell
SB30 braucht weder Datenbank noch grosses Framework und auch keinen Build-Prozess. Seiteninhalte werden direkt aus einfachen Dateien gelesen. Die kurzen Ausführungswege und die lokal eingebundenen Bibliotheken sorgen deshalb für schnelle Seitenaufrufe mit wenig technischem Ballast. Die tatsächliche Ladezeit hängt zusätzlich vom Webserver, der Verbindung und der Grösse der verwendeten Bilder ab. Archiv- und Speichergrössen hängen von Programmstand, Bildern und mitgelieferten Inhalten ab.
Architektur und Dateien
index.php: Request, Menü, Layout und Editor-Einbindungsettings.php: Konfigurationstyles.css: responsives Layoutapp.js: Navigation, Editor und Bildbetrachterupload-image.php: geschützter JSON-Uploadlist-images.php: Bildliste für den Editor, getrennt nach normalen Bildern und Slidernbackup.phpundincludes/backup.php: geschützter ZIP-Downloadassets/plugins/slider/trumbowyg.slider.js: Slider-Dialog und Editor-Integrationassets/plugins/slider/slider.js: Schieberbedienung in der öffentlichen Ansichtincludes/site.php: Pfade und Inhalteincludes/admin.php: Anmeldung, CSRF und Speichernincludes/gallery.php: Bildskalierung und Galerieausgabeincludes/news.php: News-Ausgabe und Beitragsverwaltungpages/: Inhaltsbaum;images/: Uploads;assets/vendor/: lokale Bibliotheken
Inhaltsauflösung
Geladen wird die erste vorhandene Datei in der Reihenfolge index.php, index.html, inhalt.html, inhalt.php. Nur HTML-Dateien sind visuell bearbeitbar. Gewählte Pfade werden normalisiert, mit realpath() geprüft und müssen innerhalb von pages/ liegen; .. wird abgelehnt.
Sicherheit und Speichern
Anmeldung und Bearbeitungsmodus liegen in der PHP-Session. Zustandsändernde Formulare nutzen CSRF-Tokens. Speichern ist nur authentifiziert, im Bearbeitungsmodus und auf Seiten ohne Unterordner möglich. Der vorhandene HTML-Cleaner entfernt einige Editor-Reste, ist aber kein vollständiger Sanitizer; Bearbeitung darf nur vertrauenswürdigen Personen offenstehen.
Das Passwort wird als Klartext verglichen. Passwort-Hash, Anmelderatenbegrenzung und HTTP-Sicherheitsheader sind mögliche spätere Härtungen.
Upload
Der Upload akzeptiert nur POST im aktiven Bearbeitungsmodus und prüft MIME-Typen mit Fileinfo. Eine eigene Dateigrössenlimite gibt es nicht; PHP- und Webserver-Limits gelten. Normale Uploads verwenden images.folder, der Scope sliders verwendet fest images/sliders/. Die Bildliste liefert bis zu 200 Dateien nach Änderungsdatum und durchsucht keine Unterordner.
Galerie
Galerien erzeugen mit GD proportionale Varianten, überspringen vorhandene Dateien und sortieren natürlich nach Dateinamen.
News und Blog
News-Seiten tragen den Typcode 03. Beiträge werden ohne Datenbank unter
pages/NNName03/posts/Datum-Titel/ abgelegt. meta.php gibt ein festes
Metadaten-Array zurück, content.html enthält den Beitrag. Öffentliche Listen
enthalten nur veröffentlichte Beiträge und werden absteigend nach Datum
sortiert. Slugs und Pfade werden validiert; Speichern und Löschen erfordern
Bearbeitungsmodus und CSRF-Prüfung.
Lokale Bibliotheken
Alle Bibliotheken liegen lokal unter assets/vendor/. Verwendet werden jQuery 3.7.1, Trumbowyg 2.31.0 und jquery-resizable-dom 0.35.0.
Trumbowyg wird durch die Erweiterungen Resizimg, Table, Font Family, Font Size, Colors, Special Chars, Emoji und Cleanpaste ergänzt. Die Upload-Funktion ist oben als eigener technischer Bereich beschrieben.
Slider-Integration und Speichern
Ein Slider besteht aus einem .sb-slider-Element mit zwei Bildern, einem Range-Eingabefeld und einer Trennlinie. Die Editor-Integration verwendet ein nicht editierbares span und wandelt ältere figure-Slider beim Bearbeiten um. Das linke Bild bestimmt das Seitenverhältnis; das rechte wird mit object-fit: cover eingepasst.
Im Editor ist das Element als Ganzes verschiebbar und das Range-Feld deaktiviert. Drag-and-drop innerhalb des Editors verschiebt den DOM-Knoten statt nur die Bilder als HTML einzufügen. Kopieren verwendet zusätzlich zu HTML ein eigenes Clipboard-Format. Beim Synchronisieren ins Textfeld werden die Editor-Attribute draggable am Slider sowie disabled und tabindex am Schieber entfernt. Die öffentliche Laufzeit bereinigt diese Attribute auch bei älteren gespeicherten Slidern.
slider.js setzt bei Eingaben die CSS-Variable --slider-position. Der Schieber ist nur in der öffentlichen Ansicht aktiv. Die öffentliche Bedienung schreibt keine Inhaltsdatei. styles.css enthält das Erscheinungsbild und das Raster der Beispielseite; app.js registriert das orangefarbene SVG-Speichern-Symbol im Trumbowyg-Symbolsystem.
Backup
Das Archiv wird ausserhalb des Webverzeichnisses erstellt und nach dem Download gelöscht. ZIP-Dateien, Backup- und Entwicklungsordner sowie symbolische Links werden ausgelassen. Details und Voraussetzungen stehen unter Verwaltung.
