- Admin guide: RBAC roles, role-based dashboard, plugin types (content/system) - CodePress developer guide: plugin types, admin plugin API, SCSS compilation, asset serving - Theme developer guide: SCSS sole CSS source, css_compiled read-only, guide layout - Content manager guide: layout selection from theme.json, plugin order in frontmatter - Both NL and EN updated with identical structure - 35 files updated
84 lines
5.5 KiB
Markdown
84 lines
5.5 KiB
Markdown
# CMS Architecture
|
|
|
|
CodePress is a file-based CMS without a database. Content, configuration and users are stored in files.
|
|
|
|
## Folder structure
|
|
|
|
```
|
|
codepress/
|
|
├── cms/ # Core CMS engine
|
|
│ ├── core/
|
|
│ │ ├── class/
|
|
│ │ │ ├── CodePressCMS.php # Main CMS class (routing, rendering, breadcrumb)
|
|
│ │ │ ├── ThemeManager.php # Theme resolver + Twig render + SCSS compile
|
|
│ │ │ ├── ContentAPI.php # Read-only API for PHP content
|
|
│ │ │ ├── ContentSecurityPolicy.php # CSP header management
|
|
│ │ │ ├── Analytics.php # Visitor statistics
|
|
│ │ │ ├── BotGuard.php # Bot/AI detection
|
|
│ │ │ ├── Cache.php # Cache system
|
|
│ │ │ ├── GeoIP.php # GeoIP lookup (country, flag)
|
|
│ │ │ ├── Logger.php # Basic logging
|
|
│ │ │ ├── LogManager.php # Dynamic logging (SQLite/syslog)
|
|
│ │ │ ├── RateLimiter.php # Rate limiting per IP
|
|
│ │ │ ├── RequestLogger.php # Request logging + visitor info
|
|
│ │ │ ├── SearchEngine.php # Full text search
|
|
│ │ │ └── AccessibilityManager.php # Accessibility features
|
|
│ │ ├── plugin/
|
|
│ │ │ ├── PluginManager.php # Plugin loader (hooks, filters, sidebar, admin routes)
|
|
│ │ │ └── CMSAPI.php # API for plugins (getPage, getConfig, etc.)
|
|
│ │ ├── config.php # Config loader (reads config.json)
|
|
│ │ └── index.php # Bootstrap (autoloader, requires)
|
|
│ ├── lang/ # Language files (nl.php, en.php)
|
|
│ └── router.php # PHP dev server router
|
|
├── themes/ # Dynamic themes
|
|
│ └── default/ # Default theme (views + assets)
|
|
│ ├── theme.json # { title, config.default_template, template: layout→.twig }
|
|
│ ├── base.twig # Main layout
|
|
│ ├── *.twig # Layout templates
|
|
│ ├── partials/ # header.twig, navigation.twig, footer.twig
|
|
│ └── assets/
|
|
│ ├── scss/theme.scss # SCSS source (only CSS source)
|
|
│ ├── css_compiled/ # Generated by scssphp (read-only)
|
|
│ ├── css/ # External CSS (bootstrap.min.css, etc.)
|
|
│ ├── js/ # JavaScript
|
|
│ └── img/ # Images
|
|
├── admin/ # Admin panel
|
|
│ ├── config/
|
|
│ │ ├── app.php # Admin app configuration
|
|
│ │ └── admin.json # Users & security (file-based, .gitignore'd)
|
|
│ ├── src/
|
|
│ │ └── AdminAuth.php # Authentication + RBAC
|
|
│ ├── theme/default/ # Admin theme (views + assets)
|
|
│ │ ├── theme.json
|
|
│ │ ├── assets/ # CSS, JS, CodeMirror, fonts
|
|
│ │ └── views/ # login.twig, layouts/, pages/
|
|
│ └── storage/ # Logs, cache, geoip
|
|
├── plugins/ # CMS plugins
|
|
│ ├── Navigation/ # Essential navigation plugin (protected)
|
|
│ │ ├── Navigation.php # Plugin code (NOT plugin.php)
|
|
│ │ ├── plugin.json # Metadata with type field
|
|
│ │ └── assets/ # SCSS + CSS
|
|
│ └── HTMLBlock/ # Example sidebar plugin
|
|
├── content/ # Website content (.md, .php, .html) — .gitignore'd
|
|
├── guide/ # Guides (nl/en)
|
|
├── public/ # Web root
|
|
│ ├── index.php # Website entry point
|
|
│ ├── admin.php # Admin entry point + routing
|
|
│ ├── asset.php # Asset server for Apache (themes/, admin/assets/, plugins/)
|
|
│ ├── .htaccess # Forwards asset URLs to asset.php
|
|
│ ├── favicon.ico
|
|
│ └── robots.txt
|
|
├── var/ # Cache (twig) — .gitignore'd
|
|
├── config.json # Site configuration — .gitignore'd
|
|
├── composer.json # PHP dependencies (CommonMark, Twig, scssphp)
|
|
└── version.php # Version information (2.5.2)
|
|
```
|
|
|
|
## Principles
|
|
|
|
- **No database** — Everything in files (content in `content/`, users in `admin/config/admin.json`, config in `config.json`)
|
|
- **File-based auth** — `AdminAuth` uses bcrypt hashes in `admin.json`, sessions for login
|
|
- **Twig templating** — Themes use Twig; `ThemeManager` renders via Twig
|
|
- **SCSS compilation** — `assets/scss/theme.scss` → `assets/css_compiled/theme.css` via scssphp (read-only output)
|
|
- **Plugin system** — `PluginManager` loads content and system plugins with hooks/filters
|
|
- **Asset serving** — PHP dev router (`cms/router.php`) or Apache (`.htaccess` → `public/asset.php`) |