- 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.1 KiB
Content management
CodePress uses a tree view (/admin/content) for content management: a file browser sidebar + CodeMirror editor, uniform with the plugin and theme editors. The old list/table view has been removed.
Content editor
File browser sidebar
- Shows the nested file tree of
content/ - Hidden directories (
.bak,.git) and dotfiles are skipped - Click a file to open it in the CodeMirror editor
- Folders containing the active file are auto-expanded
- Per folder there are action buttons: new file, new folder, rename, delete
Editable file types
.md (Markdown), .php (PHP), .html (HTML) — consistent with the existing content-edit page.
All types support --- frontmatter (layout, created, edited, plugins). The CMS parseMetadata() extracts frontmatter before processing. For PHP files, frontmatter is stripped from the output.
PHP content files
PHP files can deliver content in two ways:
- Echo (output buffering): everything
echoed or outside<?phptags is used as content - Return (callback style):
return '<h1>Hello</h1>';— the returned string is used as content
In PHP files, the ContentAPI is available via $api:
<?php
$menu = $api->getMenu();
$pages = $api->getAllPages();
$config = $api->getConfig('site_title');
return '<h1>' . htmlspecialchars($config) . '</h1>';
Frontend URLs and file names
The CMS searches files in order: .md → .php → .html. If files share the same name (e.g. test.md and test.php), /nl/test always opens test.md. To open a specific file type, add the extension to the URL:
/nl/test→ openstest.md(or.php/.htmlif.mddoesn't exist)/nl/test.php→ openstest.php(explicit extension)/nl/test.html→ openstest.html(explicit extension)
The preview link in the editor automatically uses the extension for non-.md files.
Set image size (Markdown)
The markdown editor toolbar has an "Image size" button (expand icon):
- Select an image in the editor in markdown format
 - Click the "Image size" button
- Enter width and/or height (px or %, empty = don't set)
- The
{:width=... height=...}syntax is added to or replaced on the image
Example:
{:width="200" height="100"}
Existing {:width=...} values are shown in the prompts. The size attributes are rendered as width/height HTML attributes on the <img> tag in the frontend.
Images in content
Images in content/ are served via the /-media/ endpoint (content/ lives outside the webroot). Markdown syntax  with local URLs (relative like image.jpg, or absolute like /content/_images/image.jpg) is automatically rewritten to /-media/.... External URLs (https://...) are left untouched.
Create a new file
- Click New file (at the top or per folder in the sidebar)
- Enter a path within content (e.g.
en.pageorblog/en.post) - Choose the file type (Markdown/PHP/HTML)
- Subfolders are created automatically
- Frontmatter with
layout,created,editedis auto-generated
Upload a file
- Click Upload to upload files to
content/ - Allowed: images, video, audio, PDF, ZIP, office docs, CSS, SCSS, JS, JSON, HTML, MD
- Path-traversal protection: target dir must stay within
content/
Move / delete a file
- In the file tree each file has a move button (arrows icon) and a delete button (trash)
- Move: choose a target folder from the dropdown listing all folders in content
- Delete: with confirmation
Folder management
- New folder: per folder in the sidebar or at the top
- Rename folder: pencil icon per folder
- Delete folder: trash icon per folder (only empty folders)
Layout selection
On the editor page you can choose the layout from the layouts defined in theme.json (template mapping). The selected layout is stored in the frontmatter layout: key.
Plugins on pages
- Only active content plugins (from
plugin.jsonwithtype: "content") appear in the plugin multiselect; system plugins (like Statistics/Logs/Dashboard) are excluded - Choose which plugins run on the page via the multiselect (use Ctrl/Cmd+click for multiple)
- The plugin selection is stored in the frontmatter
plugins:key
Backup integration
At the top of the content editor there is a Backup button linking to the backup page (/admin/content-backup) for ZIP backup/restore and (if available) git versioning. Git integration in the editor sidebar has been removed; git will become a system plugin later.
Frontmatter
The editor shows the Created and Edited timestamps (read-only, automatically updated on every save). The edited: value is refreshed on each save.
---
layout: left_sidebar
created: 2026-08-19 10:30:25
edited: 2026-08-20 14:22:01
plugins: HTMLBlock, Navigation
---
# Page title
Content...
Frontmatter
The editor updates the frontmatter live when layout or plugin selection changes:
---
layout: left_sidebar
created: 2026-08-19 10:30:25
edited: 2026-08-20 14:22:01
plugins: HTMLBlock, Navigation
---
# Page title
Content...