Harden the content contracts and enforce the slug rule

This commit is contained in:
tleininger committed 2026-09-24 12:08:56 +02:00
1 parent d06af2891a
commit 0f7e968c16
13 files changed
+157 -81

No files matched your search

+26 -3
View File
@@ -87,8 +87,9 @@ sofort live, ohne Code und ohne Rebuild:
5. Optional `location` (`header`/`footer`) **und** `order` setzen, damit die Seite
ins Menü kommt; optional `embed` für eingebettete Blöcke (siehe unten).
- **Slug bleibt englisch und ohne Umlaute.** `imprint`, `privacy`, `contact`,
`board`, `patrons`. Der `title` darf deutsch mit Umlauten sein (`Förderverein`).
- **Slug bleibt englisch und ohne Umlaute** — `imprint`, `privacy`, `contact`,
`board`, `patrons`; erzwungen per Pattern (siehe *Slug-Regel wird erzwungen*
unten). Der `title` darf deutsch mit Umlauten sein (`Förderverein`).
- **Reservierte Slugs.** `posts`, `events`, `faqs` und `/` (die Startseite `home`)
gehören den festen Listen-/Sonderansichten. Eine `pages`-Seite mit einem dieser
Slugs wird von der jeweiligen Ansicht verdeckt und **nicht** angezeigt; in der
@@ -105,6 +106,26 @@ sofort live, ohne Code und ohne Rebuild:
> Diese Slugs nicht ändern — sonst laufen die rechtlich verlinkten Adressen ins
> Leere (404).
### Slug-Regel wird erzwungen
Ein Slug muss ein sauberes URL-Segment sein: **Kleinbuchstaben, Ziffern und
einzelne Bindestriche als Trenner, keine Umlaute** (`ueber-uns`, nicht `Über uns`).
Das ist keine Bitte, sondern eine Feldregel: PocketBase weist einen Slug ab, der
sie verletzt, und zeigt beim Speichern einen Fehler. Gibst du `Overview` ein,
kommst du erst weiter, wenn du `overview` daraus machst. Die Website verlässt sich
darauf — sie repariert einen Slug nicht mehr nachträglich.
Die Regel steckt als **Pattern** am Feld `slug`. So ist sie gesetzt (einmalig,
pro Collection mit einem Slug — `pages` **und** `posts`):
1. Collection öffnen → *Edit collection* (oben rechts) → Feld `slug`.
2. Am Feld auf das **Zahnrad** (Feldoptionen) → **Pattern**.
3. Als Pattern eintragen: `^[a-z0-9]+(-[a-z0-9]+)*$`
4. **Save** (Feld) und **Save** (Collection).
Zum Prüfen: `board`, `ueber-uns`, `faq-lunch` werden angenommen; `Overview`,
`über-uns`, `my page`, `-x` und `a--b` werden abgewiesen.
---
## Beiträge (`posts`)
@@ -116,7 +137,9 @@ der Startseite als Vorschau angeteasert.
- `date` steuert Sortierung und angezeigtes Datum. Anders als bei Terminen zählt
hier nur der **Tag** — eine Uhrzeit wird nie angezeigt, und die UTC-Verschiebung
aus dem Termine-Hinweis spielt keine Rolle. Trage einfach das Datum ein.
- `slug` ist englisch, klein, ohne Umlaute (z. B. `new-sports-hall-opened`).
- `slug` ist englisch, klein, ohne Umlaute (z. B. `new-sports-hall-opened`) —
dieselbe erzwungene Feldregel wie bei Seiten (siehe *Seiten → Slug-Regel wird
erzwungen*).
---