Strukturhandbuch bioco.ch
Dieses Handbuch erklärt die Struktur der Website und dient als Nachschlagewerk für Redakteure und Administratoren.
1. Architektur
Die Website besteht aus zwei Systemen auf demselben Server (Novatrend cPanel):
- ProcessWire (PHP): das Redaktionssystem (Headless CMS). Hier liegen alle Inhalte. Zugang:
https://cms.bioco.ch/processwire/. - Next.js 14 (React/TypeScript): das Frontend, das die Website für Besucher darstellt.
Next.js holt die Inhalte über eine einheitliche REST-API aus ProcessWire (/api/content/*) und rendert die Seiten statisch vor (SSG/ISR). Beim Publizieren stösst das CMS eine gezielte Aktualisierung der betroffenen Seiten an (On-Demand-Revalidation), sodass Änderungen ohne neues Deployment live gehen.
Redakteur ──▶ Visual Editor ──▶ ProcessWire (Inhalte)
│ Revalidation
▼
Next.js (Website) ──▶ Besucher
2. Aktueller Stand
Die Inhalte werden dynamisch aus ProcessWire geladen. Die Referenzseite ist /abos: sie besteht vollständig aus CMS-Abschnitten (inklusive der Preis-Tabelle als Komponente) und wird im Visual Editor gepflegt.
| Bereich | Stand |
|---|---|
| Seiteninhalte (Abschnitte) | CMS-gesteuert über content_sections, im Visual Editor bearbeitbar |
| Navigation | aus ProcessWire (/api/content/navigation) |
| Events / Aktuelles | eigene Seiten unter /aktuelles/ (Template event), Sammlungs-Editor im Visual Editor |
| Formulare | in ProcessWire verarbeitet (mit Double-Opt-In und Captcha) |
| Revalidation | aktiv; Publizieren aktualisiert die Live-Seite automatisch |
| Matomo Analytics | aktiv (cookieless) |
Hinweis
Einige ältere Seiten können noch fest im Code stehen und werden schrittweise auf CMS-Abschnitte umgestellt. /abos dient dabei als Vorlage.
3. Inhaltsmodell: Abschnitte (content_sections)
Eine CMS-gesteuerte Seite hält ihre Inhalte in einem Wiederholungsfeld content_sections. Jeder Eintrag ist ein Abschnitt mit diesen Feldern:
| Feld | Bedeutung |
|---|---|
section_title |
Überschrift des Abschnitts |
section_eyebrow |
kleine Zeile über der Überschrift |
section_text |
Fliesstext (Rich Text / CKEditor) |
section_image, image_alt |
Bild aus der Mediathek und Alt-Text |
button_text / button_href / button_variant |
erster Button |
button2_text / button2_href / button2_variant |
zweiter Button |
section_image_brightness/contrast/saturate |
Bildanpassungen |
section_component |
Schlüssel einer Komponente (siehe Abschnitt 4) |
section_config |
JSON-Konfiguration der Komponente |
Das Layout (Bild links/rechts, Banner, Galerie, nur Text) ergibt sich aus den gefüllten Feldern bzw. der gewählten Komponente. Überschriften können auch direkt im Rich Text stehen.
4. Komponenten (Registry)
Setzt ein Abschnitt das Feld section_component, rendert das Frontend eine registrierte Komponente. Die Zuordnung steht in site/templates/component-registry.json.
| Schlüssel | Funktion |
|---|---|
pricing_table |
Abo-Preistabelle mit drei Stufen (Halb, Standard, Doppel); Werte über section_config |
page_intro |
Einleitungsblock mit konfigurierbarer Breite/Ausrichtung |
media_text, cards_grid, gallery_strip, text_columns |
Layout-Bausteine |
timeline_header, timeline_item, cta_band |
Zeitleiste und Aktionsband |
events_feed |
Liste der nächsten Events |
pricing_calculator |
interaktiver Preisrechner |
saisonkalender |
Erntekalender |
gallery |
Bildergalerie |
depot_map, geisshof_map |
Karten |
contact_form, membership_form, subscribe_form, visit_day_form, waiting_list_form |
Formulare |
Komponenten mit Optionen (zum Beispiel pricing_table) zeigen ihre Felder im Visual Editor als zusätzliche Eingaben (Text-, Zahl- oder Auswahlfelder), gespeichert in section_config.
5. Events und Aktuelles
Events sind eigene Seiten mit dem Template event unter /aktuelles/. Wichtige Felder: event_start, event_end, event_status (bevorstehend/vergangen), event_location, event_summary, body, event_card_image, event_media, event_signup_enabled, event_signup_notes.
Im Visual Editor werden Events über das Sammlungs-Panel verwaltet (öffnet sich auf der Seite Aktuelles): Liste aller Einträge, je Eintrag → In PW öffnen, und Neuen Event erstellen über einen Datumswähler. Das separate Blog-Template news_item existiert, wird aktuell aber nicht verwendet.
6. Seitenübersicht (Auswahl)
| URL | Seite |
|---|---|
/ |
Startseite |
/abos |
Abos und Preise (CMS-gesteuert, Referenz) |
/gemuese |
Gemüse und Ernte |
/solawi |
Solidarische Landwirtschaft |
/mitmachen, /bioco-werden |
Mitglied werden |
/aktuelles |
News und Events |
/standorte-depots |
Abholstationen |
/wir |
Über biocò |
/kontakt |
Kontakt |
/warteliste, /newsletter, /tag-der-offenen-tuer |
Anmeldungen |
/impressum, /datenschutz, /statuten |
Rechtliches |
Weitere CMS-Seiten ausserhalb dieser Liste werden über eine Catch-all-Route automatisch aus ProcessWire gerendert.
7. Caching und Revalidation
Next.js speichert Seiten zwischen (ISR). Beim Speichern in ProcessWire stösst ein Hook (site/ready.php) eine Revalidation der betroffenen Pfade an; das Publizieren im Visual Editor löst sie zusätzlich direkt aus und meldet zurück, ob die Website die Aktualisierung bestätigt hat. Details: siehe API-Dokumentation.
8. Glossar
| Begriff | Erklärung |
|---|---|
| Abschnitt / Block | Baustein einer Seite (content_sections) |
| Komponente | Abschnitt mit besonderem Aussehen und eigenen Optionen |
| Visual Editor | Live-Vorschau-Editor unter /visual-editor/ |
| Headless CMS | CMS ohne eigene Darstellung, liefert nur Daten |
| ISR / Revalidation | gezielte Aktualisierung zwischengespeicherter Seiten |
| Template | Vorlage für einen Seitentyp in ProcessWire |
| DOI | Double-Opt-In, zweistufige Bestätigung bei Anmeldungen |
Zuletzt aktualisiert: Juni 2026