v2.5.1: Admin theme refactor, Navigation plugin, user roles, guide restructure
- Reorganize admin into admin/theme/default/ (views + assets) - Rename GuideNav to Navigation plugin (essential, protected) - Plugin assets support (SCSS/CSS) loaded after theme CSS - User roles: Admin, Content Manager, BI Manager, Site Admin - Role-based access control (RBAC) for admin routes and sidebar - Guide restructure: sub-topics in separate folders with sidebar nav - Dynamic breadcrumb for homepage and subdirectories - Fix theme path traversal (../../ -> ../) in admin.php - Fix CodeMirror mode load order (xml -> css -> js -> htmlmixed -> php) - Fix editor-toolbar.js null checks for plugin edit pages - Layout select from theme.json with live frontmatter update - Footer sticky at bottom of viewport (min-height: 100vh) - Breadcrumb color fix (var(--nav-font) -> var(--header-bg)) - Remove language switcher from guide pages - Update README.md and README.en.md - Bump version to 2.5.1
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# Content API
|
||||
|
||||
De Content API is beschikbaar in PHP content bestanden (`.php`) en biedt een veilige, read-only interface tot CMS data.
|
||||
|
||||
## Gebruik in PHP content bestanden
|
||||
|
||||
```php
|
||||
<?php
|
||||
/** @var ContentAPI $api */
|
||||
|
||||
// Alle pagina's ophalen
|
||||
$allPages = $api->getAllPages();
|
||||
// Resultaat: ['index' => 'Home', 'over-ons' => 'Over ons', ...]
|
||||
|
||||
// Specifieke pagina ophalen
|
||||
$page = $api->getPage('over-ons');
|
||||
// Resultaat: ['title' => 'Over ons', 'content' => '...', 'path' => 'over-ons', 'layout' => 'full_content', 'metadata' => [...]]
|
||||
|
||||
// Menu structuur ophalen
|
||||
$menu = $api->getMenu();
|
||||
// Resultaat: [['title' => 'Home', 'path' => 'index', 'type' => 'file', 'active' => true], ...]
|
||||
|
||||
// Config waarde ophalen (dot notatie)
|
||||
$siteTitle = $api->getConfig('site_title');
|
||||
$searchEnabled = $api->getConfig('features.search_enabled', false);
|
||||
```
|
||||
|
||||
## Beschikbare methods
|
||||
|
||||
### Pagina's
|
||||
|
||||
- `getAllPages(): array` - Alle pagina's als `['pad' => 'titel']` pairs
|
||||
- `getPage(string $path): ?array` - Specifieke pagina met `title`, `content`, `path`, `layout`, `metadata`
|
||||
- `pageExists(string $path): bool` - Controleer of een pagina bestaat
|
||||
- `getCurrentPageTitle(): string` - Titel van huidige pagina
|
||||
- `getCurrentPagePath(): string` - Pad van huidige pagina
|
||||
- `isHomepage(): bool` - Of huidige pagina de homepage is
|
||||
|
||||
### Menu & Navigatie
|
||||
|
||||
- `getMenu(): array` - Hiërarchische menu structuur met `title`, `path`, `children`, `active`
|
||||
- `buildUrl(string $page = 'index', ?string $lang = null, array $params = []): string` - Bouw een URL voor een pagina
|
||||
|
||||
### Configuratie
|
||||
|
||||
- `getConfig(string $key, mixed $default = null): mixed` - Config waarde via dot notatie (bijv. `'features.search_enabled'`)
|
||||
- `getSiteTitle(): string` - Site titel uit config
|
||||
|
||||
### Taal
|
||||
|
||||
- `getCurrentLanguage(): string` - Huidige taal code (bijv. `'nl'`)
|
||||
- `getAvailableLanguages(): array` - Beschikbare talen (bijv. `['nl', 'en']`)
|
||||
- `t(string $key): string` - Vertaal een language key
|
||||
|
||||
### Zoeken
|
||||
|
||||
- `getSearchResults(): array` - Zoekresultaten (leeg als niet aan het zoeken)
|
||||
- `isSearching(): bool` - Of er momenteel gezocht wordt
|
||||
|
||||
## Voorbeeld: Recentste pagina's tonen
|
||||
|
||||
```php
|
||||
<?php
|
||||
/** @var ContentAPI $api */
|
||||
$pages = $api->getAllPages();
|
||||
$currentLang = $api->getCurrentLanguage();
|
||||
?>
|
||||
<ul>
|
||||
<?php foreach (array_slice($pages, 0, 5, true) as $path => $title): ?>
|
||||
<li>
|
||||
<a href="/<?= $currentLang ?>/<?= htmlspecialchars($path) ?>">
|
||||
<?= htmlspecialchars($title) ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
```
|
||||
|
||||
## Voorbeeld: Config waarde gebruiken
|
||||
|
||||
```php
|
||||
<?php
|
||||
/** @var ContentAPI $api */
|
||||
if ($api->getConfig('features.search_enabled', false)): ?>
|
||||
<form method="GET" action="">
|
||||
<input type="search" name="search" placeholder="<?= $api->t('search_placeholder') ?>">
|
||||
<button type="submit"><?= $api->t('search_button') ?></button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
```
|
||||
|
||||
## CMSAPI (voor plugins)
|
||||
|
||||
Plugins gebruiken de `CMSAPI` class via `$this->api`. Deze biedt vergelijkbare methods:
|
||||
|
||||
```php
|
||||
$this->api->getCurrentPageTitle();
|
||||
$this->api->getCurrentPageContent();
|
||||
$this->api->getMenu();
|
||||
$this->api->getConfig('site_title');
|
||||
$this->api->getCurrentLanguage();
|
||||
$this->api->isHomepage();
|
||||
$this->api->hasContent();
|
||||
$this->api->getSearchResults();
|
||||
$this->api->isSearching();
|
||||
$this->api->getAvailableLanguages();
|
||||
$this->api->createUrl('over-ons');
|
||||
$this->api->translate('home');
|
||||
```
|
||||
|
||||
Daarnaast heeft de CMSAPI:
|
||||
|
||||
- `getCurrentPage(): array` - Volledige pagina data
|
||||
- `getCurrentPageUrl(): string` - URL van huidige pagina
|
||||
- `getCurrentPageFileInfo(): ?array` - Bestandsinfo (created, modified)
|
||||
- `getBreadcrumb(): string` - Breadcrumb HTML
|
||||
- `executePhpFile(string $filePath): string` - Voer PHP bestand uit en vang output op
|
||||
- `getFileContent(string $filePath): string` - Haal content uit PHP/HTML/Markdown bestand
|
||||
- `contentFileExists(string $filename): bool` - Controleer of bestand bestaat in content map
|
||||
@@ -0,0 +1,31 @@
|
||||
# Content structuur
|
||||
|
||||
Content wordt opgeslagen in de `content/` map zonder database.
|
||||
|
||||
## Ondersteunde bestandsformaten
|
||||
|
||||
- `.md` - Markdown (aanbevolen)
|
||||
- `.php` - Dynamische PHP pagina's
|
||||
- `.html` - Statische HTML pagina's
|
||||
|
||||
## Bestandsnaam conventies
|
||||
|
||||
```
|
||||
nl.pagina-naam.md # Nederlandse pagina
|
||||
en.page-name.md # Engelse pagina
|
||||
```
|
||||
|
||||
## Frontmatter
|
||||
|
||||
Markdown bestanden kunnen frontmatter metadata bevatten:
|
||||
|
||||
```markdown
|
||||
---
|
||||
layout: full_content
|
||||
plugins: HTMLBlock
|
||||
---
|
||||
|
||||
# Pagina titel
|
||||
|
||||
Content...
|
||||
```
|
||||
@@ -0,0 +1,16 @@
|
||||
# Media beheren
|
||||
|
||||
## Uploaden
|
||||
|
||||
1. Ga naar Content map
|
||||
2. Klik **Upload**
|
||||
3. Selecteer bestanden (JPG, PNG, GIF, WebP, SVG, PDF, etc.)
|
||||
4. Uploaden
|
||||
|
||||
## Gebruiken in content
|
||||
|
||||
```markdown
|
||||

|
||||
|
||||
<video src="/content/video.mp4" controls></video>
|
||||
```
|
||||
@@ -0,0 +1,16 @@
|
||||
# Pagina's beheren
|
||||
|
||||
## Via Admin Console
|
||||
|
||||
1. Login op `/admin`
|
||||
2. Ga naar **Content**
|
||||
3. Kies een map of maak een nieuwe pagina
|
||||
4. Bewerk content in de editor
|
||||
5. Sla op met Ctrl+S
|
||||
|
||||
## Editor functies
|
||||
|
||||
- **CodeMirror** editor met syntax highlighting
|
||||
- **Toolbar** voor snel Markdown invoegen
|
||||
- **Live preview** via knop
|
||||
- **Auto-save** backups in `.bak/` map
|
||||
Reference in New Issue
Block a user