Architektur
Der Aufbau des Cores, der Request-Lebenszyklus und die Framework-losen Konventionen, denen TubePress folgt.
TubePress ist eine bewusst einfach gehaltene Software. Es gibt kein Framework, keinen Dependency-Injection-Container und keinen Build-Schritt – nur gut organisiertes, modernes PHP mit statischen Klassen. Diese Seite erklärt, wie die Teile zusammenpassen, damit Sie das CMS sicher erweitern können und genau wissen, wo Ihr Code hingehört.
Designphilosophie
Drei Grundideen prägen die gesamte Codebasis:
- Kein Framework. Reines PHP mit eigenen statischen Klassen. Es gibt keine Composer-Laufzeitabhängigkeiten, die brechen können, und nichts zu lernen außer PHP selbst.
- Ein fester Kern, freie Add-ons. Der Kern ist aktualisierbar und sollte niemals direkt bearbeitet werden. Alles, was Sie anpassen, befindet sich in Themes, Plugins oder Einstellungen.
- Skalierbar und für günstiges Hosting geeignet. Schwere Aufgaben werden in Blöcke aufgeteilt, und ein eingebauter Pseudo-cron bedeutet, dass kein System-crontab erforderlich ist.
Verzeichnisstruktur
Das Repository trennt den Kern (fest, aktualisierbar) von Add-ons (von Benutzern installiert und entfernt).
CORE — never modified by themes/plugins, replaced by updates
config/ App config, DB config, install marker
src/Core/ App, Database, Router, Pagination, CronManager,
and the managers (Seo, Transcode, Update, …)
src/Auth/ Auth, Gate (permissions)
src/Models/ Video, Category, Tag, Performer, Channel,
Comment, Page, User, Setting, Favorite, History
src/Admin/ Admin CRUD controllers
src/Front/ Public-facing controllers
src/Install/ InstallController, Migrator
src/Helpers/ Format, FileUpload, Sanitizer, Slug, SEO,
Player, RateLimiter, ImpressionTracker
src/Plugin/ HookSystem, PluginInterface, PluginManager
src/Theme/ ThemeManager, ThemeRenderer
sql/ Numbered migrations (001_…sql → 0xx_…sql)
templates/admin/ Admin panel templates (layout + partials)
templates/install/ Install wizard templates
public/ Web root — index.php, uploads/, symlinks
cron/ Optional CLI scripts for a system crontab
ADD-ONS — installable / removable by users
themes/ Theme directories (active: "simply")
plugins/ Plugin directories (agegate, backup, ctr)
lang/ Translation files (en, fr, de, es, ar, …)src/, config/, sql/ oder templates/ kann durch ein Update überschrieben werden. Platzieren Sie Ihre Änderungen in einem Theme oder Plugin, damit sie erhalten bleiben.Der Request-Lebenszyklus
Jeder Request fließt in der gleichen Reihenfolge durch public/index.php:
- PHP-Versionsschutz.
config/php-guard.phpwird zuerst ausgeführt – ein parse-sicheres Gate, das den Start bei einer nicht unterstützten PHP-Version anhält, bevor moderne Syntax geladen wird. - Bootstrap.
config/app.phprichtet Autoloading, die Session und die Kerndienste ein. - Installationsprüfung. Wenn
App::isInstalled()false ist (keinconfig/installed.php), wird der Request zum Installationsassistenten weitergeleitet und nichts anderes wird geladen. - Routen-Registrierung. Admin-, API- und Front-Controller registrieren ihre Routen jeweils über eine statische
::routes()-Methode. - Dispatch.
Router::dispatch()findet die passende URL und ruft die Controller-Methode auf. - Render. Admin-Aktionen rendern
templates/admin/*; Front-Aktionen rendern das aktive Theme überThemeRenderer::render(). - Nachbearbeitung. Impressionen werden geleert und
CronManager::run()führt fällige Aufgaben aus.
Frontend-Routen (der /{slug} Catch-All für statische Seiten) werden zuletzt registriert, damit sie echte Routen nicht überdecken.
Kern-Konventionen
| Konzept | Konvention |
|---|---|
| Controllers | AdminXxxController::routes() / FrontXxxController::routes() registrieren Routen; Methoden verarbeiten Requests. |
| Models | Statische Methoden: Video::find($id), Video::all($filters), Video::create($data). |
| Database | Database::fetchOne(), fetchAll(), insert(), update(), delete(), count(), transaction(). |
| Router | Router::get(), Router::post(), Router::param('name'), Router::redirect(). |
| Admin templates | Router::render('admin/videos', […]) → templates/admin/videos.php (lädt layout.php + ein _videos.php-Partial). |
| Front templates | ThemeRenderer::render('home', […]) → aktives Theme-Template + sein layout.php. |
| Migrations | sql/NNN_name.sql, werden automatisch von Migrator::run() bei Installation und Update ausgeführt. |
| Hooks | HookSystem::doAction('event') und HookSystem::applyFilter('filter', $value). |
Webserver-Unterstützung
TubePress läuft sowohl auf Apache als auch auf Nginx:
- Apache —
.htaccess-Dateien übernehmen URL-Umschreibung und Verzeichnisschutz. - Nginx —
alias-Direktiven liefern Assets unddeny all-Regeln schützen sensible Pfade. - Symlinks —
public/themes → ../../themesundpublic/templates → ../../templatesstellen Theme- und Admin-Assets bereit, während der PHP-Quellcode außerhalb des Webroot bleibt.
Das Webroot ist immer public/. Alles Sensible – config/, src/, sql/, storage/ – liegt außerhalb davon und ist zusätzlich auf Serverebene gesperrt.
Wo anpassen
| Sie möchten… | Dann hier… |
|---|---|
| Aussehen und Layout ändern | Ein Theme (oder Erscheinungsbild-Einstellungen für Code-freie Änderungen) |
| Eine Funktion oder Integration hinzufügen | Ein Plugin mit Actions & Filtern |
| Verhalten ohne Code ändern | Einstellungen |
| Geplante Aufgaben hinzufügen | Den CronManager, aus einem Plugin |
Nächste Schritte
Noch Hilfe benötigt?
Erstellen Sie ein Ticket in Ihrem Dashboard und unser Team hilft Ihnen gerne weiter.