- 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
6.7 KiB
CodePress CMS v2.6.3 — Release Notes
Release datum: 2026-08-20
Codename: Lyra
Status: stable
Samenvatting
Deze release richt zich op content met meerdere bestandstypes en een
duidelijkere Content API. Content bestanden die dezelfde naam delen maar een
ander type hebben (test.md, test.php, test.html) worden nu correct
afgehandeld: de frontend serveert per extensie het juiste bestand, en de admin
accepteert en toont ze allemaal. Daarnaast is de getAllPages() API herschreven
naar een rijkere array-structuur en zijn de verberg-prefixen voor mappen/bestanden
gewijzigd (. vervangt _).
Nieuwe features & wijzigingen
1. Content bestanden met dezelfde naam, ander type
Eerder kon een content map niet twee bestanden bevatten met dezelfde naam maar
een verschillend type (bijv. test.md + test.php). De frontend routeerde
alleen op naam zonder extensie, waardoor slechts één bestand geserveerd werd.
Nu:
- URL met extensie (
/nl/test.php) serveert exact dat bestand. - URL zonder extensie (
/nl/test) valt terug op het eerste bestaande bestand met prioriteit md > php > html (via de nieuweresolveContentByType()helper). - De admin content editor accepteert bestanden met dezelfde naam (ander type); de "bestaat al" check is per extensie. De melding is verduidelijkt naar "Bestand met dit type bestaat al."
- De admin preview-knop linkt per extensie (
test.php→/nl/test.php) zodat elk type individueel te bekijken blijft.
2. Frontend navigatie tonen alle bestandstypes
scanDirectory() (menu), getDirectoryListing() (directory view) en
searchInDirectory() (zoeken) tonen nu elk bestand apart met de extensie
behouden in de URL. Bestanden met dezelfde naam maar ander type zijn niet meer
samengevoegd tot één menu-item — elk type krijgt zijn eigen link.
3. getAllPages() array structuur
ContentAPI::getAllPages() (en CMSAPI::getAllPages() voor plugins) gaf eerder
een associative array ['pad' => 'titel']. Nu is het een list van entry
arrays:
[
['path' => 'test-map', 'title' => 'Test Map', 'type' => 'folder'],
['path' => 'test-map/test.md','title' => 'Nieuwe pagina', 'type' => 'md'],
['path' => 'test.md', 'title' => 'Test', 'type' => 'md'],
['path' => 'test.php', 'title' => 'Test.', 'type' => 'php'],
['path' => 'test.html', 'title' => 'Nieuwe pagina', 'type' => 'html'],
]
typeismd/php/htmlvoor bestanden,foldervoor mappen.- Mappen krijgen hun eigen entry zodat de boom-structuur zichtbaar blijft.
- Bestanden met dezelfde naam maar ander type botsen niet meer (de extensie zit in het pad).
autoLinkPageTitles() is aangepast aan de nieuwe structuur en slaat mappen over.
4. Verberg-prefix logica: . i.p.v. _
Vooraf verborg de frontend mappen/bestanden die begonnen met ., - of _.
Nu is _ geen verberg-prefix meer — alleen . (en -) verbergen aan de
frontend. Dit maakt .map of .bak de standaard manier om content te verbergen.
De admin daarentegen toont wél alle . bestanden en mappen (.bak,
.map), behalve .git/.gitkeep. De scanEditorFilesNode() functie heeft een
nieuwe $scope parameter die bepaalt of dotfiles getoond worden (alleen voor
content scope).
collectContentPages() (admin config default-page dropdown) toont nu ook .
bestanden.
5. ContentAPI getPage()/pageExists() met extensie
ContentAPI::getPage('test.php') en pageExists('test.php') respecteren nu de
expliciete extensie — ze openen dat specifieke bestand in plaats van terug te
vallen op md-prioriteit.
6. Handleiding content-api.md herschreven
De handleiding guide/nl/content-beheerder/content-api.md en de Engelse
tegenhanger zijn volledig herschreven:
- Hoe content naar Twig gaat: echo/print vs return mechanisme duidelijk uitgelegd met voorbeelden
- Wat je niet kunt: geen eigen Twig variabelen vanuit PHP; je voedt alleen
{{ content }} - Beschikbare variabelen in een
.phpbestand:$apien$pageMetadata - Nieuwe getAllPages() structuur met type-veld en voorbeelden
- Layout kiezen: hoe de
layoutfrontmatter key koppelt naartheme.json - Veiligheidsrichtlijnen
Technische details
Nieuwe/gewijzigde functies (core)
CodePressCMS::resolveContentByType(string $basePath, ?string $preferredExt = null): ?array— Nieuwe helper die het eerste bestaande bestand (md > php > html) serveert, of het bestand met de gevraagde extensie als$preferredExtopgegeven is.CodePressCMS::scanForPageTitles()— herschreven naar list van['path','title','type']entries; mappen als eigen entry;_niet meer verborgen.CodePressCMS::scanDirectory()/searchInDirectory()/getDirectoryListing()—_verwijderd uit verberg-logica; extensie behouden in URLs.CodePressCMS::autoLinkPageTitles()— aangepast aan nieuwe array structuur.ContentAPI::getPage()/pageExists()— respecteren expliciete extensie.ContentAPI::getAllPages()/CMSAPI::getAllPages()— docblocks bijgewerkt.scanEditorFilesNode()— nieuwe$scopeparameter; content-scope toont dotfiles (behalve .git/.gitkeep).scanContentDir()/collectContentPages()— tonen nu.bestanden/mappen.
Gewijzigde bestanden
cms/core/class/CodePressCMS.php— resolveContentByType, scanForPageTitles, scanDirectory, searchInDirectory, getDirectoryListing, autoLinkPageTitles, sanitizePageParam (punt toegestaan), getPage (explicitExt terug)cms/core/class/ContentAPI.php— getPage/pageExists met extensie, getAllPages docblockcms/core/plugin/CMSAPI.php— getAllPages docblockpublic/admin.php— scanContentDir, scanEditorFilesNode, collectContentPages, handleContentNew/handleContentFiles meldingenadmin/theme/default/views/pages/content-files.twig— preview link per extensieadmin/theme/default/views/pages/content-edit.twig— preview link per extensieguide/nl/content-beheerder/content-api.md— herschrevenguide/en/content-beheerder/content-api.md— herschrevenversion.php— 2.6.3README.md/README.en.md— versie 2.6.3TODO.md— v2.6.3 sectie toegevoegd
Tests
- PHP lint: alle bestanden syntactisch correct (
php -l) - Live getest via Apache (development.codepress.noorlander.info):
/nl/test.phpserveert test.php/nl/test.htmlserveert test.html/nl/test(zonder ext) serveert test.md (md prioriteit)- Admin content boom toont
.bak,.map,_imagesen alle bestandstypes - Frontend navigatie verbergt
.bak/.map, toont alle bestandstypes apart $api->getAllPages()in test.php toont pad/titel/type structuur
Volgende stappen
Zie TODO.md voor openstaand werk (multidomein implementatie).