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
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user