- Content bestanden met dezelfde naam maar ander type (md/php/html) worden correct geserveerd: URL met extensie opent dat bestand, URL zonder extensie valt terug op md > php > html (resolveContentByType helper) - Admin content editor accepteert bestanden met dezelfde naam (ander type); preview-knop linkt per extensie - Frontend navigatie/directory listing/search tonen elk bestandstype apart - getAllPages() array structuur gewijzigd naar list van ['path','title','type'] met type 'md'/'php'/'html'/'folder' - Verberg-prefix logica: _ is geen verberg-prefix meer, alleen . (en -); admin toont wél alle . bestanden/mappen - ContentAPI getPage()/pageExists() respecteren expliciete extensie - Handleiding content-api.md (NL+EN) herschreven - File-tree unificatie: _file-tree.twig + _editor-styles.twig includes - Versie verhoogd naar 2.6.3
5.4 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/ - Verborgen mappen (
.bak,.git) en dotfiles worden overgeslagen - Klik op een bestand om het te openen in de CodeMirror editor
- Mappen die het actieve bestand bevatten zijn automatisch uitgeklapt
- Per map staan actie-knoppen: nieuw bestand, nieuwe map, hernoemen, verwijderen
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
- Klik op Nieuw bestand (bovenaan of per map in de zijbalk)
- 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
Bestand uploaden
- Klik op Upload om bestanden naar
content/te uploaden - Toegestaan: afbeeldingen, video, audio, PDF, ZIP, office docs, CSS, SCSS, JS, JSON, HTML, MD
- Path-traversal bescherming: doelmap moet binnen
content/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 content
- Verwijderen: met bevestiging
Mappen beheer
- Nieuwe map: per map in de zijbalk of bovenaan
- Map hernoemen: potlood-icoon per map
- Map verwijderen: prullenbak-icoon per map (alleen lege mappen)
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...