Files
E.Noorlander 6485f693dc 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

160 lines
6.7 KiB
Markdown

# 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**:
```php
[
['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).