WuCMS ist ein modulares Community-CMS, entwickelt in PHP 8.1+ auf einer schlanken Custom-Architektur – ohne externe Frameworks, ohne unnötigen Overhead.
⚠️ Lizenz: Ausschließlich für private, nicht-kommerzielle Nutzung. Weitergabe und Verkauf sind untersagt. Alle Rechte vorbehalten – © 2026 Marc (Der-WU)
- Features
- Module
- Sidebar-Widgets
- Kern-Architektur
- Systemvoraussetzungen
- Installation
- Konfiguration
- Verzeichnisstruktur
- Admin-Bereich
- Sauberes MVC-ähnliches Routing – URL-Segmente werden direkt auf Handler-Dateien gemappt
- Modulares System – jedes Modul ist eigenständig und leicht erweiterbar
- Mehrsprachigkeit – deutsches Standardlayout, Sprachcode per Session oder Admin wählbar
- Theme-System – vollständig austauschbare Themes in
themes/{name}/ - Sidebar-Widget-System – Widgets links/rechts frei konfigurierbar, per Drag & Drop sortierbar im Admin
- Responsive Dark-Theme – modernes CSS mit Variablen, kein Bootstrap-Overhead
- CSRF-Schutz auf allen POST-Formularen
- Rate Limiting – konfigurierbares Limit pro Aktion (Kontakt, Forum, Login, Upload, ...)
- Passwort-Hashing mit
password_hash()/PASSWORD_BCRYPT - XSS-Schutz – konsequentes
htmlspecialchars()(e()) im Template - SQL-Injection-Schutz – ausschließlich PDO Prepared Statements
- Captcha für Gäste (Kontaktformular, Gästebuch, Registrierung)
- Remember-Me mit sicheren Zufallstoken (DB-gespeichert, mit Ablaufzeit)
- E-Mail-Verifikation bei Registrierung (Token, 24h Gültigkeit)
- IP-basiertes Rate Limiting in DB mit konfigurierbaren Fenstern
- Registrierung mit E-Mail-Bestätigung
- Anmeldung + Remember-Me (30 Tage)
- Passwort zurücksetzen per E-Mail-Link
- Profilseite mit Avatar, Bio, Website, Signatur
- Nutzergalerie (öffentlich/privat)
- Geburtsdatum (optional öffentlich)
- Gruppen: Administrator, Moderator, Mitglied, Gast
- Konto selbst löschen (mit Bestätigungs-E-Mail)
- Dual-Mode: PHP
mail()oder SMTP via Socket (Port 587 mit STARTTLS, Port 465 mit SSL) - AUTH LOGIN-Unterstützung
- HTML-Multipart-Mails (Text + HTML)
- Verwendet für: Registrierung, Passwort-Reset, Kontaktformular, Konto-Löschung
| Modul | Beschreibung |
|---|---|
| Home | Startseite mit BB-Code-Editor, konfigurierbarem Willkommenstext |
| News | Artikel mit Kategorien, Kommentaren, Paginierung |
| Forum | Boards, Threads, Antworten, Suche, Signatur, Rang-System |
| Gästebuch | Einträge mit Moderations-Option (Freischaltung), Kommentare |
| FAQ | Fragen & Antworten mit Kategorien |
| Downloads | Datei-Uploads mit Kategorien, Beschreibungen, Download-Counter |
| Galerie | Bild-Upload (Site-Galerie + User-Galerie), Lightbox-Ansicht |
| Umfragen (Polls) | Abstimmungen mit Ergebnisanzeige |
| Weblinks | Link-Sammlung mit Kategorien und Klick-Tracking |
| Kalender | Event-Kalender, Nutzer können Einträge erstellen (konfigurierbar) |
| Shoutbox | Live-Chatbox im Widget, Archiv-Seite |
| PM Center | Private Nachrichten: Posteingang, Gesendet, Lesen, Antworten, Löschen |
| Kontakt | Kontaktformular mit SMTP-Weiterleitung an konfigurierte E-Mail-Adresse |
| Seiten (Pages) | Statische Seiten mit BB-Code-Editor |
| Suche | Globale Seitensuche über mehrere Module |
| Discord | Discord-Server-Statusseite via Widget API (Online-Mitglieder, Voice-Kanäle) |
| TeamSpeak 3 | TS3-Server-Statusseite via ServerQuery (Kanäle, Nutzer, Uptime) |
| Navigation | Menü-Verwaltung (Header, Footer, Widget) – mit Drag & Drop im Admin |
| Admin | Vollständiger Verwaltungsbereich (siehe unten) |
Jedes Widget ist eine eigenständige PHP-Template-Datei. Widgets können im Admin per Drag & Drop auf linke oder rechte Sidebar verteilt und sortiert werden.
| Widget | Beschreibung |
|---|---|
| Community-Box | Eingeloggte Nutzer, Online-Zähler, PM-Link mit Unread-Badge, Login-Formular für Gäste |
| Shoutbox | Letzte X Shouts mit Eingabefeld |
| News (Aktuell) | Neueste News-Artikel |
| News (Beliebt) | Meistgelesene News |
| Forum (Aktuell) | Neueste Beiträge |
| Forum (Beliebt) | Beiträge mit meisten Antworten |
| Downloads (Aktuell) | Neueste Downloads |
| Downloads (Beliebt) | Meistgeladene Downloads |
| Weblinks (Aktuell) | Zuletzt eingetragene Links |
| Weblinks (Beliebt) | Meistgeklickte Links |
| Kalender | Nächste Termine |
| Umfragen | Aktuelle Abstimmung |
| Statistiken | Besucher heute, gesamt, Online-Nutzer |
| Navigation | Konfigurierbares Navigations-Widget |
| PM | Ungelesene Nachrichten-Zähler mit Link |
| Discord | Server-Status, Online-Zähler, Beitritt-Button |
| TeamSpeak 3 | Kanal-/Nutzer-Baum, Online-Zähler, Verbinden-Button |
core/
├── Auth.php Login, Logout, Registrierung, Token-Verwaltung
├── Cache.php Dateibasierter Fragment-Cache mit TTL und Tag-Gruppen
├── Captcha.php Einfaches Bild-Captcha
├── Config.php DB-basierte Key/Value-Konfiguration
├── Database.php PDO-Wrapper (fetch, fetchAll, execute, table-Prefix)
├── helpers.php url(), redirect(), e(), t(), post(), get(), truncate(), avatarUrl(), ...
├── Lang.php Sprachdateien laden, t() Übersetzungsfunktion mit Platzhaltern
├── Mailer.php PHP mail() + SMTP-Socket mit STARTTLS/SSL
├── Paginator.php Paginierung mit Offset/Limit und HTML-Ausgabe
├── Router.php URL → Modul/Handler-Routing, Services als lokale Variablen
├── Security.php CSRF, Rate Limiting (DB-basiert), requirePost()
├── Session.php Session-Wrapper mit Flash-Messages
├── Template.php View-Rendering mit Header/Footer-Layout + Widget-Integration
├── Tracker.php Besucher-Tracking, Online-User, Bot-Erkennung
├── Uploader.php Bild- und Datei-Uploads mit MIME-Validierung, optionaler GD-Rekodierung
└── Widgets.php Widget-Registry, Sidebar-Rendering
/news → modules/news/handlers/index.php
/news/view/42 → modules/news/handlers/view.php ($params = [42])
/pm/compose → modules/pm/handlers/compose.php
/admin/config → modules/admin/handlers/config.php
Alle Core-Services stehen in jedem Handler automatisch als lokale Variablen zur Verfügung:
$db, $auth, $session, $security, $config, $template, $mailer, $captcha, $cache, $lang, $widgets
| Anforderung | Minimum |
|---|---|
| PHP | 8.1 oder höher |
| MySQL / MariaDB | 5.7+ / 10.3+ |
| PHP-Extensions | pdo_mysql, mbstring, gd, openssl (für SMTP) |
| Webserver | Apache (mit mod_rewrite) oder Nginx |
| Schreibrechte | content/, cache/ (und Unterordner) |
Alle Dateien in das gewünschte Webserver-Verzeichnis kopieren (z. B. /var/www/html/wucms oder htdocs/wucms).
In phpMyAdmin oder per CLI eine leere MySQL-Datenbank erstellen:
CREATE DATABASE wucms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Den Browser auf den Installer-Pfad öffnen:
http://localhost/wucms/install/
Der Installer führt folgende Schritte durch:
- Setup-Passwort – Einmalpasswort für den Installer setzen
- Systemprüfung – PHP-Version, Extensions, Schreibrechte
- Datenbankverbindung – Host, Name, Nutzer, Passwort, Tabellenpräfix
- Administrator-Konto – Benutzername, E-Mail, Passwort
- Installation – Tabellen anlegen, Konfiguration schreiben
Nach erfolgreicher Installation wird install/install.lock angelegt. Der Installer ist danach gesperrt.
💡 Sicherheit: Den
install/-Ordner nach der Installation löschen oder per.htaccesssperren.
Apache – .htaccess im Stammverzeichnis:
Options -Indexes
RewriteEngine On
RewriteBase /wucms/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]Nginx:
location /wucms/ {
try_files $uri $uri/ /wucms/index.php?$query_string;
}chmod -R 755 content/
chmod -R 755 cache/Wenn neue Datenbank-Tabellen oder Spalten hinzugekommen sind:
http://localhost/wucms/install/migrate.php
Die Datei config.php wird beim ersten Installlationsschritt automatisch erstellt. Sie enthält nur die Datenbankverbindung und Basispfade:
define('WU_DB_HOST', 'localhost');
define('WU_DB_NAME', 'wucms');
define('WU_DB_USER', 'root');
define('WU_DB_PASS', '');
define('WU_DB_PREFIX', 'wu_');
define('WU_SITE_URL', 'http://localhost/wucms'); // kein trailing slash
define('WU_SITE_NAME', 'Meine Website');
define('WU_THEME', 'default');
define('WU_TIMEZONE', 'Europe/Berlin');
define('WU_DEBUG', false); // auf false setzen in Produktion!Alle weiteren Einstellungen werden im Admin → Einstellungen verwaltet und in der Datenbanktabelle wu_config gespeichert:
| Kategorie | Schlüssel |
|---|---|
| Website | site_title, site_tagline, site_description, site_copyright, site_banner |
| E-Mail / SMTP | smtp_host, smtp_port, smtp_user, smtp_pass, smtp_from, smtp_from_name |
| Kontakt | contact_email |
| Registrierung | registration_enabled, email_verification_enabled |
| Wartungsmodus | maintenance_mode, maintenance_message |
| Discord | discord_server_id, discord_invite, discord_server_name, discord_description |
| TeamSpeak 3 | ts3_host, ts3_port, ts3_query_port, ts3_query_user, ts3_query_pass |
| PM Center | pm_enabled, pm_max_messages |
| Rate Limits | rl_contact_max, rl_forum_thread_max, rl_upload_max, ... |
Im Admin unter Einstellungen → E-Mail / SMTP:
| Feld | Beispiel |
|---|---|
| SMTP-Host | smtp.gmail.com |
| SMTP-Port | 587 (STARTTLS) oder 465 (SSL) |
| SMTP-Benutzer | deine@gmail.com |
| SMTP-Passwort | App-Passwort |
| Absender-E-Mail | noreply@example.com |
| Absender-Name | Meine Website |
- Im TS3-Server die ServerQuery-Anmeldedaten in den TS3-Logs nachschlagen (beim ersten Start ausgegeben)
- Im Admin unter Einstellungen → TeamSpeak 3 eintragen:
- TS3-Host-IP / Domain
- Voice-Port (Standard:
9987) - Query-Port (Standard:
10011) - ServerQuery-Login + Passwort
wucms/
├── cache/ Fragment-Cache (auto-erstellt)
├── content/
│ ├── avatars/ Benutzer-Avatare + Standard-Avatare
│ ├── downloads/ Hochgeladene Download-Dateien
│ └── gallery/ Galerie-Bilder (site/ + users/)
├── core/ Kern-Klassen (Auth, DB, Router, ...)
├── install/ Installer + Schema-SQL-Dateien
├── lang/
│ ├── de/ Deutsche Sprachdateien
│ └── en/ Englische Sprachdateien
├── modules/
│ ├── admin/ Admin-Bereich (Handler + Templates)
│ ├── forum/
│ ├── news/
│ ├── pm/
│ ├── ts3/
│ └── ... (je ein Unterordner pro Modul)
├── themes/
│ └── default/
│ ├── assets/
│ │ └── css/main.css
│ ├── modules/ Modul-Templates
│ ├── widgets/ Widget-Templates
│ ├── header.tpl.php
│ └── footer.tpl.php
├── config.php Lokale Konfiguration (nicht in Git!)
├── config.sample.php Vorlage für config.php
└── index.php Einstiegspunkt (Front Controller)
Erreichbar unter /admin (nur für Administratoren).
| Bereich | Funktion |
|---|---|
| Dashboard | Schnellübersicht: Nutzer, Beiträge, Online-User, neue Nachrichten |
| Einstellungen | Alle Konfigurations-Schlüssel (Website, SMTP, Module, Rate Limits) |
| Benutzer | Liste aller Nutzer, Bearbeiten, Sperren, Gruppe ändern |
| Navigation | Header/Footer/Widget-Menüs verwalten, Drag & Drop |
| Widgets | Sidebar-Widgets konfigurieren, Reihenfolge festlegen |
| News | Artikel und Kategorien verwalten |
| Forum | Boards erstellen, Boards bearbeiten, Ränge verwalten |
| Galerie | Galerie moderieren |
| Downloads | Kategorien und Dateien verwalten |
| Gästebuch | Einträge moderieren, freischalten |
| Umfragen | Umfragen erstellen und verwalten |
| Kalender | Kalender-Einträge verwalten |
| FAQ | Fragen und Kategorien verwalten |
| Shoutbox | Shouts moderieren |
| Weblinks | Links und Kategorien verwalten |
| Kontakt | Eingegangene Kontaktanfragen einsehen |
| Seiten | Statische Seiten erstellen / bearbeiten |
| Rechtliches | Impressum, Datenschutz, AGB |
WuCMS – entwickelt von Marc (Der-WU)