Arsitektur
Tata letak inti, siklus hidup permintaan dan konvensi tanpa framework yang diikuti TubePress.
TubePress adalah perangkat lunak yang sengaja dirancang sederhana. Tidak ada framework, tidak ada container dependency-injection, dan tidak ada langkah build — hanya PHP modern yang terorganisir dengan baik menggunakan static class. Halaman ini menjelaskan bagaimana setiap bagian saling terhubung sehingga Anda dapat memperluas CMS dengan percaya diri dan tahu persis di mana kode Anda berada.
Filosofi desain
Tiga gagasan membentuk seluruh kode:
- Tanpa framework. PHP murni dengan static class kustom. Tidak ada dependensi runtime Composer yang bisa bermasalah dan tidak ada yang perlu dipelajari selain PHP itu sendiri.
- Core tetap, add-on bebas. Core dapat diperbarui dan tidak boleh diedit secara langsung. Semua kustomisasi Anda berada di tema, plugin, atau pengaturan.
- Dirancang untuk skalabilitas dan hosting murah. Pekerjaan berat dipecah menjadi bagian-bagian kecil, dan pseudo-cron bawaan berarti tidak diperlukan sistem crontab.
Struktur direktori
Repositori memisahkan core (tetap, dapat diperbarui) dari add-on (diinstal dan dihapus oleh pengguna).
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/ atau templates/ dapat ditimpa oleh pembaruan. Letakkan perubahan Anda di tema atau plugin agar tetap ada.Siklus permintaan
Setiap permintaan mengalir melalui public/index.php dengan urutan yang sama:
- Penjaga versi PHP.
config/php-guard.phpberjalan pertama — sebuah gate yang aman dari parsing yang menghentikan boot pada versi PHP yang tidak didukung sebelum sintaks modern apa pun dimuat. - Bootstrap.
config/app.phpmenyiapkan autoloading, sesi, dan layanan inti. - Pemeriksaan instalasi. Jika
App::isInstalled()bernilai false (tidak adaconfig/installed.php), permintaan diarahkan ke wizard instalasi dan tidak ada yang dimuat lagi. - Registrasi rute. Controller admin, API, dan front masing-masing mendaftarkan rutenya melalui metode static
::routes(). - Dispatch.
Router::dispatch()mencocokkan URL dan memanggil metode controller. - Render. Aksi admin merender
templates/admin/*; aksi front merender tema aktif melaluiThemeRenderer::render(). - Pekerjaan pasca-render. Impresi dikirimkan dan
CronManager::run()menjalankan tugas yang sudah jatuh tempo.
Rute halaman depan (catch-all /{slug} untuk halaman statis) didaftarkan terakhir, sehingga tidak pernah menutupi rute yang sebenarnya.
Konvensi core
| Konsep | Konvensi |
|---|---|
| Controller | AdminXxxController::routes() / FrontXxxController::routes() mendaftarkan rute; metode menangani permintaan. |
| Model | Metode static: 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(). |
| Template admin | Router::render('admin/videos', […]) → templates/admin/videos.php (memuat layout.php + sebuah partial _videos.php). |
| Template front | ThemeRenderer::render('home', […]) → template tema aktif + layout.php-nya. |
| Migrasi | sql/NNN_name.sql, dijalankan secara otomatis oleh Migrator::run() selama instalasi dan pembaruan. |
| Hook | HookSystem::doAction('event') dan HookSystem::applyFilter('filter', $value). |
Dukungan web server
TubePress berjalan di Apache maupun Nginx:
- Apache — file
.htaccessmenangani penulisan ulang URL dan proteksi direktori. - Nginx — direktif
aliasmenyajikan aset dan aturandeny allmelindungi jalur sensitif. - Symlink —
public/themes → ../../themesdanpublic/templates → ../../templatesmengekspos aset tema dan admin sambil menjaga sumber PHP di luar web root.
Web root selalu berupa public/. Semua yang sensitif — config/, src/, sql/, storage/ — berada di luar direktori tersebut dan juga diblokir di tingkat server.
Di mana melakukan kustomisasi
| Anda ingin… | Lakukan di… |
|---|---|
| Mengubah tampilan & tata letak | Sebuah tema (atau pengaturan Tampilan untuk perubahan tanpa kode) |
| Menambahkan fitur atau integrasi | Sebuah plugin menggunakan aksi & filter |
| Mengubah perilaku tanpa kode | Pengaturan |
| Menambahkan pekerjaan terjadwal | CronManager, dari sebuah plugin |
Langkah berikutnya
Masih kesulitan?
Buka tiket dari dasbor Anda dan tim kami akan membantu Anda.