- 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
123 lines
5.4 KiB
Markdown
123 lines
5.4 KiB
Markdown
# 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:
|
|
1. **Echo** (output buffering): alles wat `echo`d of outside `<?php` staat wordt als content gebruikt
|
|
2. **Return** (callback stijl): `return '<h1>Hallo</h1>';` — de geretourneerde string wordt als content gebruikt
|
|
|
|
In PHP bestanden is de `ContentAPI` beschikbaar via `$api`:
|
|
```php
|
|
<?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` → opent `test.md` (of `.php` / `.html` als `.md` niet bestaat)
|
|
- `/nl/test.php` → opent `test.php` (expliciete extensie)
|
|
- `/nl/test.html` → opent `test.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):
|
|
1. Selecteer een afbeelding in de editor in markdown formaat ``
|
|
2. Klik op de "Afbeelding grootte" knop
|
|
3. Vul breedte en/of hoogte in (px of %, leeg = niet instellen)
|
|
4. De `{:width=... height=...}` syntax wordt aan de afbeelding toegevoegd of vervangen
|
|
|
|
Voorbeeld:
|
|
```markdown
|
|
{: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.pagina` of `blog/nl.post`)
|
|
- Kies het bestandstype (Markdown/PHP/HTML)
|
|
- Submappen worden automatisch aangemaakt
|
|
- Frontmatter met `layout`, `created`, `edited` wordt 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.json` met `type: "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.
|
|
|
|
```markdown
|
|
---
|
|
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:
|
|
|
|
```markdown
|
|
---
|
|
layout: left_sidebar
|
|
created: 2026-08-19 10:30:25
|
|
edited: 2026-08-20 14:22:01
|
|
plugins: HTMLBlock, Navigation
|
|
---
|
|
|
|
# Pagina titel
|
|
|
|
Content...
|
|
``` |