- 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
206 lines
6.1 KiB
Markdown
206 lines
6.1 KiB
Markdown
# Twig templates
|
|
|
|
## Basis syntax
|
|
|
|
```twig
|
|
{# Commentaar #}
|
|
{{ variabele }}
|
|
{{ variabele|default('standaard') }}
|
|
{% if voorwaarde %}...{% endif %}
|
|
{% for item in items %}...{% endfor %}
|
|
{% extends 'base.twig' %}
|
|
{% block content %}{% endblock %}
|
|
{% include 'partials/header.twig' %}
|
|
```
|
|
|
|
## base.twig voorbeeld
|
|
|
|
```twig
|
|
<!DOCTYPE html>
|
|
<html lang="{{ current_lang }}">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>{{ page_title }} - {{ site_title }}</title>
|
|
<meta name="description" content="{{ seo_description }}">
|
|
<link rel="stylesheet" href="{{ theme_css_url }}">
|
|
</head>
|
|
<body>
|
|
{% include 'partials/header.twig' %}
|
|
|
|
{% block content %}{% endblock %}
|
|
|
|
{% include 'partials/footer.twig' %}
|
|
</body>
|
|
</html>
|
|
```
|
|
|
|
## Variabelen beschikbaar in templates
|
|
|
|
### Pagina data
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `page_title` | string | Titel van huidige pagina (HTML-escaped) |
|
|
| `content` | string | Ge-renderde pagina content (HTML) |
|
|
| `page_metadata` | array | Frontmatter metadata van de pagina |
|
|
| `layout` | string | Layout naam (bijv. `full_content`) |
|
|
| `sidebar_content` | string | Sidebar content van plugins (HTML) |
|
|
| `breadcrumb` | string | Breadcrumb HTML (gegeneerd door CMS) |
|
|
|
|
### Site data
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `site_title` | string | Site titel uit config.json |
|
|
| `default_page` | string | Standaard pagina pad |
|
|
| `homepage` | string | Homepage pad |
|
|
| `homepage_title` | string | Homepage titel |
|
|
| `is_homepage` | bool | Of huidige pagina de homepage is |
|
|
| `is_guide_page` | bool | Of huidige pagina een handleiding is |
|
|
| `has_content` | bool | Of content map niet leeg is |
|
|
| `cms_version` | string | CMS versie nummer |
|
|
|
|
### Menu & Navigatie
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `menu` | string | Ge-renderd menu HTML |
|
|
| `current_page` | string | Huidige pagina pad |
|
|
| `breadcrumb` | string | Breadcrumb HTML |
|
|
|
|
### Taal
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `current_lang` | string | Huidige taal code (bijv. `nl`) |
|
|
| `current_lang_upper` | string | Huidige taal in hoofdletters |
|
|
| `available_langs` | array | Beschikbare talen met `code`, `name`, `url`, `is_current` |
|
|
|
|
### SEO
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `seo_description` | string | SEO beschrijving |
|
|
| `seo_keywords` | string | SEO keywords |
|
|
| `block_ai_bots` | bool | AI bots blokkeren |
|
|
| `block_search_engines` | bool | Zoekmachines blokkeren |
|
|
|
|
### Auteur
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `author_name` | string | Auteur naam |
|
|
| `author_website` | string | Auteur website URL |
|
|
| `author_git` | string | Auteur Git URL |
|
|
|
|
### Theme
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `theme_title` | string | Thema titel |
|
|
| `theme_css_url` | string | Gecompileerde CSS URL |
|
|
| `theme_js_url` | string | JavaScript URL |
|
|
| `theme_config` | array | Thema configuratie uit theme.json |
|
|
| `theme_base_url` | string | Basis URL van thema (bijv. `/themes/default`) |
|
|
| `theme_css_files` | array | Lijst van CSS bestanden |
|
|
| `theme_js_files` | array | Lijst van JS bestanden |
|
|
| `theme_favicon` | string | Favicon URL |
|
|
| `plugin_css_urls` | array | CSS URLs van plugins (geladen ná theme CSS) |
|
|
|
|
### Theme kleuren
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `header_color` | string | Header achtergrondkleur |
|
|
| `header_font_color` | string | Header tekstkleur |
|
|
| `header_height` | string | Header hoogte in px |
|
|
| `navigation_color` | string | Navigatie achtergrondkleur |
|
|
| `navigation_font_color` | string | Navigatie tekstkleur |
|
|
| `nav_height` | string | Navigatie hoogte in px |
|
|
| `sidebar_background` | string | Sidebar achtergrondkleur |
|
|
| `sidebar_border` | string | Sidebar randkleur |
|
|
|
|
### Bestandsinfo
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `created` | string | Aanmaakdatum van bestand |
|
|
| `modified` | string | Wijzigingsdatum van bestand |
|
|
| `show_created` | bool | Of aanmaakdatum getoond moet worden |
|
|
| `file_info_block` | bool | Of bestandsinfo blok getoond moet worden |
|
|
|
|
### Vertalingen
|
|
|
|
| Variabele | Type | Beschrijving |
|
|
|-----------|------|--------------|
|
|
| `t_home` | string | "Home" vertaling |
|
|
| `t_search` | string | "Zoeken" vertaling |
|
|
| `t_search_placeholder` | string | Zoekbalk placeholder vertaling |
|
|
| `t_search_button` | string | Zoekknop vertaling |
|
|
| `t_welcome` | string | "Welkom" vertaling |
|
|
| `t_created` | string | "Aangemaakt" vertaling |
|
|
| `t_modified` | string | "Gewijzigd" vertaling |
|
|
| `t_author` | string | "Auteur" vertaling |
|
|
| `t_manual` | string | "Handleiding" vertaling |
|
|
| `t_guide` | string | "Handleiding" vertaling |
|
|
| `t_no_content` | string | "Geen content" vertaling |
|
|
| `t_no_results` | string | "Geen resultaten" vertaling |
|
|
| `t_results_found` | string | "Resultaten gevonden" vertaling |
|
|
| `t_powered_by` | string | "Aangedreven door" vertaling |
|
|
| `t_page_not_found` | string | "Pagina niet gevonden" vertaling |
|
|
| `t_page_not_found_text` | string | "Pagina niet gevonden" tekst vertaling |
|
|
| `t_mappen` | string | "Mappen" vertaling |
|
|
| `t_paginas` | string | "Pagina's" vertaling |
|
|
|
|
## Layouts en blocks
|
|
|
|
Een layout template extends `base.twig` en vult het `content` block:
|
|
|
|
```twig
|
|
{% extends 'base.twig' %}
|
|
|
|
{% block content %}
|
|
<div class="container">
|
|
{{ content|raw }}
|
|
</div>
|
|
{% endblock %}
|
|
```
|
|
|
|
## Conditionele sidebar
|
|
|
|
```twig
|
|
{% if sidebar_content %}
|
|
<div class="row">
|
|
<aside class="col-md-4">
|
|
{{ sidebar_content|raw }}
|
|
</aside>
|
|
<main class="col-md-8">
|
|
{{ content|raw }}
|
|
</main>
|
|
</div>
|
|
{% else %}
|
|
<div class="container">
|
|
{{ content|raw }}
|
|
</div>
|
|
{% endif %}
|
|
```
|
|
|
|
## Taal switcher
|
|
|
|
```twig
|
|
{% for lang in available_langs %}
|
|
<a href="{{ lang.url }}" class="{{ lang.is_current ? 'active' : '' }}">
|
|
{{ lang.name }}
|
|
</a>
|
|
{% endfor %}
|
|
```
|
|
|
|
## Plugin CSS laden
|
|
|
|
Plugin CSS wordt automatisch geladen ná theme CSS, zodat themes plugin styling kunnen overschrijven:
|
|
|
|
```twig
|
|
{% for cssUrl in plugin_css_urls|default([]) %}
|
|
<link href="{{ cssUrl }}" rel="stylesheet">
|
|
{% endfor %}
|
|
``` |