- Fix path traversal with realpath() validation in getPage() and executePhpFile() - Remove insecure JWT secret fallback, require JWT_SECRET env var - Fix IP spoofing by only trusting proxy headers from configured proxies - Add Secure/HttpOnly/SameSite flags to all cookies - Use env var for debug mode instead of hardcoded true - Fix operator precedence bug in MQTTTracker track_user_flows check - Remove dead code: duplicate is_dir() block, unused scanForPageNames() - Remove htmlspecialchars() from filesystem path operations - Remove duplicate require_once calls and redundant autoloader includes - Fix unclosed </div> in getDirectoryListing() - Escape breadcrumb titles and add lang param to search result URLs - Make language prefixes dynamic from config instead of hardcoded nl|en - Make HTML lang attribute dynamic, add go_to translation key - Add aria-label/aria-expanded to sidebar toggle for accessibility - Fix event listener leak in app.js using event delegation - Remove console.log from production code - Update guides (NL/EN) with sidebar toggle documentation - Add TODO.md documenting all identified improvements
7.9 KiB
CodePress CMS Guide
Welcome to CodePress
CodePress is a lightweight, file-based Content Management System built with PHP and Bootstrap.
Features
🏠 Navigation
- Tab-style navigation with Bootstrap styling
- Dropdown menus for folders and sub-folders
- Home button with icon
- Automatic menu generation
- Responsive design
- Breadcrumb navigation with sidebar toggle
- Active state marking
- Sidebar toggle - Button placed left of HOME in the breadcrumb to open/close the sidebar. The icon changes between open and closed state. The choice is preserved during the session
📄 Content Types
- Markdown (.md) - CommonMark support
- PHP (.php) - Dynamic content
- HTML (.html) - Static HTML pages
- Directory listings - Automatic directory overviews
- Language-specific content -
en.andnl.prefixes
🔍 Search Functionality
- Full-text search through all content
- Results with snippets and highlighting
- Direct navigation to found pages
- SEO-friendly search results
- Search URL:
?search=query
🧭 Configuration
- JSON configuration in
config.json - Dynamic homepage setting
- SEO settings (description, keywords)
- Author information with links
- Theme configuration with colors
- Language settings
- Feature toggles
🎨 Layout & Design
- Flexbox layout for responsive structure
- Fixed header with logo and search
- Breadcrumb navigation
- Fixed footer with file info and links
- Bootstrap 5 styling
- Mustache templates
- Semantic HTML5 structure
- Dynamic layouts with YAML frontmatter
- Sidebar support with plugin integration and toggle function via breadcrumb
Installation
- Clone or download CodePress files
- Upload to your web server
- Make sure
content/directory is writable - Navigate to your website in browser
Configuration
Basic Settings
Edit config.json in your project root:
```json { "site_title": "Your Website Name", "content_dir": "content", "templates_dir": "engine/templates", "default_page": "auto", "language": { "default": "en", "available": ["en", "nl"] }, "theme": { "header_color": "#0a369d", "header_font_color": "#ffffff", "navigation_color": "#2754b4", "navigation_font_color": "#ffffff", "sidebar_background": "#f8f9fa", "sidebar_border": "#dee2e6" }, "author": { "name": "Your Name", "website": "https://yourwebsite.com" }, "seo": { "description": "Your website description", "keywords": "cms, php, content management" }, "features": { "auto_link_pages": true, "search_enabled": true, "breadcrumbs_enabled": true } } ```
Content Management
File Structure
``` content/ ├── home.md # Home page ├── blog/ │ ├── index.md # Blog overview │ ├── article-1.md # Blog article │ └── category/ │ └── article.md # Article in category └── about-us/ └── info.md # About us page ```
Content Types
Markdown (.md)
```markdown
Page Title
This is page content in Markdown format with CommonMark extensions.
Subsection
- Task list item
- Another task
- Bold and italic text
- Auto-linked pages ```
PHP (.php)
```php
This is dynamic content with PHP.
\`\`\`HTML (.html)
```html
HTML Page
This is static HTML content.
\`\`\`File Naming Conventions
- Lowercase names: Use lowercase for all files
- No spaces: Use hyphens (-) or underscores (_)
- Language prefixes:
en.page.mdandnl.page.md - Display names:
file-name.mddisplays as "File Name" in menus
Templates
Template Variables
Site Info
site_title- Website titleauthor_name- Author nameauthor_website- Author websiteauthor_git- Git repository link
Page Info
page_title- Page title (filename without extension)content- Page content (HTML)file_info- File information (dates, size)is_homepage- Boolean: is this homepage?
Navigation
menu- Navigation menubreadcrumb- Breadcrumb navigationhomepage- Homepage link
Theme
header_color- Header background colorheader_font_color- Header text colornavigation_color- Navigation background colornavigation_font_color- Navigation text color
Language
current_lang- Current language (en/nl)current_lang_upper- Current language (EN/NL)t_*- Translated strings
URL Structure
Basic URLs
- Home:
/or?page=home - Page:
?page=blog/article - Search:
?search=query - Guide:
?guide - Language:
?lang=enor?lang=nl
SEO Optimization
Meta Tags
The CMS automatically adds meta tags:
```html
\`\`\`🔌 Plugin System
Plugin Structure
``` plugins/ ├── README.md # Plugin documentation ├── HTMLBlock/ │ ├── HTMLBlock.php # Plugin class │ └── README.md # Plugin specific documentation └── MQTTTracker/ ├── MQTTTracker.php # Plugin class ├── config.json # Plugin configuration └── README.md # Plugin documentation ```
Plugin Development
- API access via
CMSAPIclass - Sidebar content with
getSidebarContent() - Metadata access from YAML frontmatter
- Configuration via JSON files
- Event hooks for extension
Available Plugins
- HTMLBlock - Custom HTML blocks in sidebar
- MQTTTracker - Real-time analytics and tracking
🎯 Template System
Layout Options
Use YAML frontmatter to select layout:
```yaml
title: My Page layout: sidebar-content
```
Available Layouts
sidebar-content- Sidebar left, content right (default)content- Content only (full width)sidebar- Sidebar onlycontent-sidebar- Content left, sidebar rightcontent-sidebar-reverse- Content right, sidebar left
Meta Data
```yaml
title: Page Title layout: content-sidebar description: Page description author: Author Name date: 2025-11-26
```
📊 Analytics & Tracking
MQTT Tracker
- Real-time page tracking
- Session management
- Business Intelligence data
- Privacy aware (GDPR compliant)
- MQTT integration for dashboards
Data Format
```json { "timestamp": "2025-11-26T15:30:00+00:00", "session_id": "cms_1234567890abcdef", "page_url": "?page=demo/sidebar-content&lang=en", "page_title": "Sidebar-Content Layout", "language": "en", "layout": "sidebar-content" } ```
Tips and Tricks
Page Organization
- Use subdirectories for categories
- Give each directory an
index.mdfor an overview page - Keep file names short and descriptive
- Use language prefixes:
en.page.mdandnl.page.md
Content Optimization
- Use clear headings (H1, H2, H3)
- Add descriptive meta information
- Use internal links for better navigation
Troubleshooting
Common Issues
- Empty pages: Check file permissions
- Template errors: Verify template syntax
- 404 errors: Check file names and paths
- Navigation not updated: Reload the page
Support
More Information
- Documentation: CodePress GitHub
- Issues and feature requests: GitHub Issues
This guide is part of CodePress CMS and is automatically displayed when no content is available.