- Thema editor (thema's net zo bewerkbaar maken als plugins): bestandsbrowser zijbalk, nieuw bestand, uploaden, verwijderen, verplaatsen, SCSS compileren vanuit editor, thema activeren/ verwijderen, nieuw thema met basis-kopie, uniforme thema-structuur - Content editor (content consistent met plugins en thema's): bestandsbrowser zijbalk naast bestaande lijst weergave, nieuw bestand/map, uploaden, verwijderen, verplaatsen, mappen beheer, layout/plugins selectie, git/backup integratie in editor zijbalk - Uniformiteit: scanEditorFiles() unified scanner (scanPluginFiles/scanThemeFiles/scanContentFiles als dunne wrappers) - Media invoegen in editor: ?theme= scope voor media-list endpoint - Bug fix: thema-naam niet overgenomen bij kopiëren - title in theme.json wordt overschreven met nieuwe themanaam - Handleidingen bijgewerkt (thema-beheer.md + content-beheer.md NL/EN) - Release notes: docs/release-notes/v2.6.2.md - Pentest 30/30, WCAG 25/25
6.0 KiB
Thema beheer
Thema's beheren
- Ga naar Thema in admin menu
- Bewerken — Klik op het potlood-icoon om themabestanden te bewerken (zie Thema editor)
- Activeren — Klik op het vinkje om een thema te activeren (wordt opgeslagen in
config.json) - SCSS compileren — Klik op het palet-icoon om SCSS geforceerd te compileren naar
assets/css_compiled/theme.css - Verwijderen — Prullenbak-icoon (alleen niet-actieve, niet-default thema's)
- Nieuw thema — Eigen thema aanmaken, optioneel gebaseerd op een bestaand thema
Thema status badges
In het thema-overzicht zie je per thema:
- Actief (groen) — dit thema is geselecteerd in
config.json - SCSS ok (groen) —
assets/css_compiled/theme.cssis nieuwer danassets/scss/theme.scss - SCSS verouderd (geel) — SCSS source is gewijzigd na laatste compile; klik op het palet-icoon om te compileren
Thema editor
Via Bewerken (potlood-icoon) in het thema-overzicht open je de thema-editor (/admin/theme-edit?theme=<naam>). Deze werkt hetzelfde als de plugin-editor:
Bestandsbrowser zijbalk
- Toont de geneste bestandsboom van het thema
assets/css_compiled/wordt verborgen (runtime artefact, read-only)- Klik op een bestand om het te openen in de CodeMirror editor
- Mappen die het actieve bestand bevatten zijn automatisch uitgeklapt
Bewerkbare bestandstypen
.twig, .json, .scss, .css, .js, .html, .md, .php
Nieuw bestand aanmaken
- Klik op Nieuw bestand
- Geef een pad op binnen het thema (bijv.
partials/header.twigofassets/scss/_variables.scss) - Submappen worden automatisch aangemaakt
- Toegestaan: twig, json, scss, css, js, html, md, php
- Een stub wordt automatisch gegenereerd (bijv.
{% extends 'base.twig' %}voor.twig)
Bestand uploaden
- Klik op Upload om bestanden naar
assets/van het thema te uploaden - Toegestaan: afbeeldingen, video, audio, PDF, ZIP, CSS, SCSS, JS, JSON, HTML, MD, TWIG, fonts
- Path-traversal bescherming: doelmap moet binnen
assets/blijven
Bestand verplaatsen / verwijderen
- In de bestandsboom heeft elk bestand een verplaats-knop (pijlen-icoon) en een verwijder-knop (prullenbak)
- Verplaatsen: kies een doelmap uit de dropdown met alle mappen in het thema
- Verwijderen: met bevestiging;
theme.jsonkan niet verwijderd worden
SCSS compileren vanuit de editor
- Bovenaan de editor staat een SCSS compileren knop (alleen als
assets/scss/theme.scssbestaat) - Toont de compile-status: up-to-date (groen) of verouderd (geel)
- Forceert compilatie via
ThemeManager::compileCss(true)
Media invoegen in editor
- De media-knop in de editor-toolbar opent de media-modal
- In thema-context scant deze
themes/<naam>/assets/(via/admin/media-list?theme=<naam>) - Snippet-formaat depends op bestandstype: markdown →
, html/php →<img src=...>, andere → ruwe URL
Beveiliging
- Alle acties vereisen CSRF token
- Path-traversal bescherming via
realpath()+ prefix-check op de thema-map theme.jsonkan bewerkt maar niet verwijderd/verplaatst worden- Default thema kan bewerkt maar niet verwijderd worden
- Actief thema kan niet verwijderd worden (activeer eerst een ander thema)
Thema structuur
themes/default/
├── theme.json # { title, config.default_template, template: layout→.twig }
├── README.md # Thema documentatie (per thema)
├── base.twig # Hoofd layout (head, header, nav, breadcrumb, footer)
├── full_content.twig # Layout: volledige breedte
├── left_sidebar.twig # Layout: sidebar links
├── right_sidebar.twig # Layout: sidebar rechts
├── custom1.twig # Layout: custom
├── guide.twig # Layout: handleiding met sidebar (Navigation plugin)
├── partials/ # header.twig, navigation.twig, footer.twig
└── assets/
├── scss/theme.scss # SCSS bron (enige CSS bron — handmatige css/theme.css mag niet bestaan)
├── css_compiled/ # Gegenereerd door scssphp (read-only, niet handmatig aanpassen, verborgen in editor)
├── css/ # Externe CSS (bootstrap.min.css, bootstrap-icons.css, mobile.css)
├── js/ # app.js, bootstrap.bundle.min.js
├── fonts/ # bootstrap-icons.woff, woff2
└── img/ # favicon, icon, world-map
Nieuwe thema's die via de admin worden aangemaakt krijgen automatisch deze uniforme structuur (met README.md, base.twig, full_content.twig, partials/header.twig, partials/footer.twig, assets/scss/theme.scss, en alle assets-submappen).
theme.json
{
"title": "default",
"config": {
"default_template": "full_content"
},
"template": {
"full_content": "full_content.twig",
"left_sidebar": "left_sidebar.twig",
"right_sidebar": "right_sidebar.twig",
"custom1": "custom1.twig",
"guide": "guide.twig"
}
}
title— Weergavenaam in adminconfig.default_template— Standaard layout voor pagina's zonderlayout:frontmattertemplate— Mapping van layout naam naar.twigbestand
SCSS compilatie
ThemeManagercompileertassets/scss/theme.scssruntime naarassets/css_compiled/theme.cssvia scssphpcss_compiled/is read-only — niet handmatig aanpassen (wordt verborgen in de thema-editor)assets/css/theme.cssmag niet bestaan; anders negeertThemeManager::getCssUrl()de SCSS- Forceer compilatie via de SCSS compileren knop in admin (of verwijder
assets/css_compiled/theme.cssen.mtime)
Layouts
Layouts worden gekozen via frontmatter layout: key in content bestanden. Onbekende layouts vallen terug op config.default_template uit theme.json.
guide.twig
Speciale layout voor handleidingen. Injecteert de Navigation plugin in de sidebar voor zijbalk navigatie. Wordt automatisch gebruikt voor pagina's in de guide/ map.