Files
CodePress/docs/release-notes/v2.6.3.md
T
E.Noorlander 06beef43d7 v2.6.3 (Lyra): Content multi-type handling, getAllPages() structuur, . verberg-prefix
- 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
2026-08-20 16:45:53 +00:00

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 nieuwe resolveContentByType() 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'],
]
  • type is md/php/html voor bestanden, folder voor 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 .php bestand: $api en $pageMetadata
  • Nieuwe getAllPages() structuur met type-veld en voorbeelden
  • Layout kiezen: hoe de layout frontmatter key koppelt naar theme.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 $preferredExt opgegeven 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 $scope parameter; 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 docblock
  • cms/core/plugin/CMSAPI.php — getAllPages docblock
  • public/admin.php — scanContentDir, scanEditorFilesNode, collectContentPages, handleContentNew/handleContentFiles meldingen
  • admin/theme/default/views/pages/content-files.twig — preview link per extensie
  • admin/theme/default/views/pages/content-edit.twig — preview link per extensie
  • guide/nl/content-beheerder/content-api.md — herschreven
  • guide/en/content-beheerder/content-api.md — herschreven
  • version.php — 2.6.3
  • README.md / README.en.md — versie 2.6.3
  • TODO.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.php serveert test.php
    • /nl/test.html serveert test.html
    • /nl/test (zonder ext) serveert test.md (md prioriteit)
    • Admin content boom toont .bak, .map, _images en 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).