7.0 KiB
Content beheer
CodePress gebruikt een boom weergave (/admin/content) voor content-beheer: een bestandsbrowser zijbalk + CodeMirror editor, uniform met de plugin- en thema-editors. De oude lijst/tabel weergave is verwijderd.
Content editor
Bestandsbrowser zijbalk
- Toont de geneste bestandsboom van
content/, met een klikbare content root bovenaan - Verborgen mappen (
.bak,.git) en dotfiles worden overgeslagen - Klik op een bestand om het te openen in de CodeMirror editor
- Klik op een map (mapnaam) om de map te selecteren — rechts verschijnt het map detail paneel
- De chevron (▶/▼) naast een map klapt deze in/uit zonder de map te selecteren
- Mappen die het actieve bestand bevatten zijn automatisch uitgeklapt
- Per map staan actie-knoppen: nieuw bestand (plus-icoon), nieuwe map (map-plus-icoon) — deze opereren op de geselecteerde map
- Per bestand staan actie-knoppen: hernoemen/verplaatsen (potlood), verwijderen (prullenbak) — verschijnen bij hover
Bestanden verslepen (drag-and-drop)
- Sleep een bestand of map naar een andere map om het te verplaatsen
- Tijdens het slepen worden geldige doel-mappen highlight getoond
- De verplaatsing gebeurt via een AJAX-call — de pagina herlaadt automatisch na succes
- Beveiliging: een map kan niet naar zichzelf of naar een submap verplaatst worden
- Path-traversal bescherming: alle paden blijven binnen de content map
Bewerkbare bestandstypen
.md (Markdown), .php (PHP), .html (HTML) — consistent met de bestaande content-edit pagina.
Alle types ondersteunen --- frontmatter (layout, created, edited, plugins). De CMS parseMetadata() haalt de frontmatter eruit vóór verwerking. Bij PHP bestanden wordt de frontmatter uit de output verwijderd.
PHP content bestanden
PHP bestanden kunnen op twee manieren content leveren:
- Echo (output buffering): alles wat
echod of outside<?phpstaat wordt als content gebruikt - Return (callback stijl):
return '<h1>Hallo</h1>';— de geretourneerde string wordt als content gebruikt
In PHP bestanden is de ContentAPI beschikbaar via $api:
<?php
$menu = $api->getMenu();
$pages = $api->getAllPages();
$config = $api->getConfig('site_title');
return '<h1>' . htmlspecialchars($config) . '</h1>';
Frontend URL's en bestandsnamen
De CMS zoekt bestanden in volgorde: .md → .php → .html. Als bestanden dezelfde naam hebben (bijv. test.md en test.php), opent /nl/test altijd test.md. Om een specifiek bestandstype te openen, voeg de extensie toe aan de URL:
/nl/test→ openttest.md(of.php/.htmlals.mdniet bestaat)/nl/test.php→ openttest.php(expliciete extensie)/nl/test.html→ openttest.html(expliciete extensie)
De preview link in de editor gebruikt automatisch de extensie voor niet-.md bestanden.
Image-grootte instellen (Markdown)
In de markdown editor-toolbar staat een "Afbeelding grootte" knop (expand-icoon):
- Selecteer een afbeelding in de editor in markdown formaat
 - Klik op de "Afbeelding grootte" knop
- Vul breedte en/of hoogte in (px of %, leeg = niet instellen)
- De
{:width=... height=...}syntax wordt aan de afbeelding toegevoegd of vervangen
Voorbeeld:
{:width="200" height="100"}
Bestaande {:width=...} waarden worden in de prompts getoond. De grootte-attributen worden in de frontend als width/height HTML-attributen op de <img> tag gezet.
Images in content
Images in content/ worden via de /-media/ endpoint geserveerd (content/ staat buiten de webroot). De markdown syntax  met lokale URLs (relatief zoals image.jpg, of absoluut zoals /content/_images/image.jpg) wordt automatisch herschreven naar /-media/.... Externe URLs (https://...) worden ongewijzigd gelaten.
Nieuw bestand aanmaken
- Selecteer de doelmap in de zijbalk (klik op de mapnaam), of gebruik de root
- Klik op Nieuw bestand (in het map-detail paneel of bovenaan)
- Geef een pad op binnen content (bijv.
nl.paginaofblog/nl.post) - Kies het bestandstype (Markdown/PHP/HTML)
- Submappen worden automatisch aangemaakt
- Frontmatter met
layout,created,editedwordt automatisch gegenereerd - Het nieuwe bestand wordt aangemaakt in de geselecteerde map
Bestand uploaden
- Selecteer de doelmap in de zijbalk (klik op de mapnaam), of gebruik de root
- Klik op Upload (in het map-detail paneel of bovenaan) om bestanden naar de geselecteerde map te uploaden
- Toegestaan: afbeeldingen, video, audio, PDF, ZIP, office docs, CSS, SCSS, JS, JSON, HTML, MD
- Path-traversal bescherming: doelmap moet binnen
content/blijven - Na de upload keer je terug naar de geselecteerde map
Bestand hernoemen / verwijderen
- Open het bestand in de editor (klik op de bestandsnaam in de zijbalk)
- Hernoemen: bewerk het Bestandsnaam veld rechts boven de editor en klik op Opslaan — het bestand wordt direct hernoemd
- Verwijderen: klik op de verwijder-knop (prullenbak) naast het bestand in de zijbalk, met bevestiging
Mappen beheer
- Klik op een map in de zijbalk om het map-detail paneel rechts te openen
- Map hernoemen: bewerk het Mapnaam veld in het map-detail paneel en klik op Opslaan
- Nieuw bestand / Nieuwe map / Uploaden in deze map: gebruik de knoppen in het map-detail paneel — ze opereren op de geselecteerde map
- Map verwijderen: verwijder-knop in het map-detail paneel (alleen lege mappen)
- De content-root is ook selecteerbaar (klik op "content" bovenaan de boom) — toont het map-detail paneel voor de root (hernoemen uitgeschakeld)
Layout selectie
Op de editor-pagina kun je de layout kiezen uit de layouts gedefinieerd in theme.json (template mapping). De geselecteerde layout wordt opgeslagen in de frontmatter layout: key.
Plugins op pagina's
- Alleen actieve content plugins (uit
plugin.jsonmettype: "content") verschijnen in de plugin multiselect; system plugins (zoals Statistics/Logs/Dashboard) zijn uitgesloten - Kies via de multiselect welke plugins op de pagina draaien (gebruik Ctrl/Cmd+klik voor meerdere)
- De plugin selectie wordt opgeslagen in de frontmatter
plugins:key
Backup integratie
Bovenaan de content-editor staat een Backup knop die naar de backup-pagina (/admin/content-backup) leidt voor ZIP backup/restore en (indien beschikbaar) git versiebeheer. Git integratie in de editor-zijbalk is verwijderd; git wordt later een systeem plugin.
Frontmatter
De editor toont de Aangemaakt en Bewerkt timestamps (read-only, automatisch bijgewerkt bij elke opslag). De edited: waarde wordt bij elke save vernieuwd.
---
layout: left_sidebar
created: 2026-08-19 10:30:25
edited: 2026-08-20 14:22:01
plugins: HTMLBlock, Navigation
---
# Pagina titel
Content...
Frontmatter
De editor werkt de frontmatter live bij bij wijzigingen van layout of plugin selectie:
---
layout: left_sidebar
created: 2026-08-19 10:30:25
edited: 2026-08-20 14:22:01
plugins: HTMLBlock, Navigation
---
# Pagina titel
Content...