Mimari
Çekirdek yapı, istek yaşam döngüsü ve TubePress'in izlediği çerçevesiz (no-framework) kurallar.
TubePress, kasıtlı olarak sade tutulmuş bir yazılımdır. Herhangi bir framework, dependency-injection container veya derleme adımı yoktur — yalnızca statik sınıflar kullanan, iyi düzenlenmiş, modern PHP. Bu sayfa, parçaların nasıl bir araya geldiğini açıklar; böylece CMS'i güvenle genişletebilir ve kodunuzun tam olarak nereye ait olduğunu bilebilirsiniz.
Tasarım felsefesi
Üç fikir tüm kod tabanını şekillendirir:
- Framework yok. Özel statik sınıflar ile saf PHP. Bozulabilecek Composer çalışma zamanı bağımlılıkları yok ve PHP'nin ötesinde öğrenilecek hiçbir şey yok.
- Sabit bir çekirdek, ücretsiz eklentiler. Çekirdek güncellenebilir olup doğrudan düzenlenmemelidir. Özelleştirdiğiniz her şey temalar, eklentiler veya ayarlar içinde yer alır.
- Ölçeklenebilir ve ucuz barındırmaya dayanıklı tasarım. Ağır işler parçalara bölünür ve yerleşik bir pseudo-cron sayesinde sistem crontab'ına gerek kalmaz.
Dizin yapısı
Depo, çekirdeği (sabit, güncellenebilir) eklentilerden (kullanıcılar tarafından yüklenen ve kaldırılan) ayırır.
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/ veya templates/ altındaki her şey bir güncelleme tarafından üzerine yazılabilir. Değişikliklerinizi bir tema veya eklentiye koyun; böylece güncellemelerden etkilenmezler.İstek yaşam döngüsü
Her istek, aynı sırayla public/index.php üzerinden akar:
- PHP sürüm kontrolü.
config/php-guard.phpönce çalışır — desteklenmeyen bir PHP sürümünde modern sözdizimi yüklenmeden önce önyüklemeyi durduran, ayrıştırma güvenli bir kapıdır. - Önyükleme.
config/app.phpotomatik yükleme, oturum ve çekirdek servisleri kurar. - Kurulum kontrolü.
App::isInstalled()false ise (yaniconfig/installed.phpyoksa), istek kurulum sihirbazına yönlendirilir ve başka hiçbir şey yüklenmez. - Rota kaydı. Admin, API ve ön yüz denetleyicilerinin her biri, statik bir
::routes()yöntemiyle rotalarını kaydeder. - Dağıtım.
Router::dispatch(), URL'yi eşleştirir ve denetleyici metodunu çağırır. - Render. Admin eylemleri
templates/admin/*şablonlarını render eder; ön yüz eylemleri, aktif temayıThemeRenderer::render()aracılığıyla render eder. - Render sonrası işler. Gösterimler temizlenir ve
CronManager::run()zamanı gelmiş görevleri tetikler.
Ön yüz sayfa rotaları (statik sayfalar için /{slug} yakalama rotası) en son kaydedilir; böylece gerçek rotaları hiçbir zaman gölgelemez.
Çekirdek kurallar
| Kavram | Kural |
|---|---|
| Denetleyiciler | AdminXxxController::routes() / FrontXxxController::routes() rotaları kaydeder; metodlar istekleri işler. |
| Modeller | Statik metodlar: Video::find($id), Video::all($filters), Video::create($data). |
| Veritabanı | Database::fetchOne(), fetchAll(), insert(), update(), delete(), count(), transaction(). |
| Router | Router::get(), Router::post(), Router::param('name'), Router::redirect(). |
| Admin şablonları | Router::render('admin/videos', […]) → templates/admin/videos.php (layout.php + bir _videos.php parçacığı yükler). |
| Ön yüz şablonları | ThemeRenderer::render('home', […]) → aktif tema şablonu + layout.php. |
| Migrasyonlar | sql/NNN_name.sql; kurulum ve güncelleme sırasında Migrator::run() tarafından otomatik çalıştırılır. |
| Kancalar | HookSystem::doAction('event') ve HookSystem::applyFilter('filter', $value). |
Web sunucusu desteği
TubePress hem Apache hem de Nginx üzerinde çalışır:
- Apache —
.htaccessdosyaları URL yeniden yazımını ve dizin korumasını yönetir. - Nginx —
aliasdirektifleri varlıkları sunar,deny allkuralları ise hassas yolları korur. - Sembolik bağlantılar —
public/themes → ../../themesvepublic/templates → ../../templates; PHP kaynaklarını web kökü dışında tutarken tema ve admin varlıklarını açığa çıkarır.
Web kökü her zaman public/ dizinidir. Hassas her şey — config/, src/, sql/, storage/ — bunun dışında yer alır ve sunucu düzeyinde ayrıca engellenir.
Nerede özelleştirme yapılır
| Yapmak istediğiniz… | Yapılacak yer… |
|---|---|
| Görünüm & düzeni değiştirmek | Bir tema (ya da kodsuz değişiklikler için Görünüm ayarları) |
| Özellik veya entegrasyon eklemek | Aksiyon & filtreler kullanan bir eklenti |
| Kod yazmadan davranışı değiştirmek | Ayarlar |
| Zamanlanmış iş eklemek | Bir eklentiden CronManager |
Sonraki adımlar
Hâlâ takıldınız mı?
Kontrol panelinizden bir destek talebi açın, ekibimiz size yardımcı olacaktır.