Sistem Analizi

Multi-Tenant Tema Sistemi

Mevcut durum, hedef yapı ve yol haritası

Basit Anlatım

Ne istiyorsun?

  • Anasayfa → Her site kendi tasarımını kullansın (Muzibu mor müzik teması, İxtif turuncu endüstriyel tema)
  • İç sayfalar → Herkes aynı "simple" şablonu kullansın (blog, ürün, sayfa detayı vs.)
  • İstisna → Bir site "ben blog sayfasını farklı istiyorum" derse, sadece o sayfayı özelleştirebilsin

İyi Haber

Sistemde bu yapı zaten var! ThemeService denen bir servis tam olarak bunu yapıyor. Sadece "simple" temasını mükemmelleştirmek ve eksik modülleri tamamlamak gerekiyor.

Mevcut Tema Yapısı

Ana Tema Klasörleri

resources/views/themes/
├── simple/      ← Fallback (varsayılan)
│   ├── layouts/
│   │   ├── app.blade.php
│   │   ├── header.blade.php
│   │   └── footer.blade.php
│   └── index.blade.php
│
├── muzibu/     ← Müzik tenant (1001)
│   ├── layouts/
│   ├── homepage.blade.php
│   └── components/
│
└── ixtif/      ← Endüstriyel tenant (2)
    ├── layouts/
    └── index.blade.php

Modül Tema Klasörleri

Modules/{Modül}/resources/views/themes/
├── simple/
│   ├── index.blade.php
│   └── show.blade.php
│
├── muzibu/
│   └── (override varsa)
│
└── ixtif/
    └── (override varsa)

Fallback Sistemi (Nasıl Çalışıyor?)

Örnek: Muzibu'da blog detay sayfası açılıyor

themes/muzibu/blog/show.blade.php

var mı?

themes/simple/blog/show.blade.php

yoksa buna düş

front/blog/show.blade.php

son çare

Tenant teması varsa → Onu kullan

Yoksa → Simple'a düş

O da yoksa → Front klasörü

Hedef Yapı

themes/
├── tenant-1001/              ← Muzibu
│   ├── homepage.blade.php    ← Özel anasayfa
│   └── modules/
│       └── blog/
│           └── show.blade.php  ← İsterse override
│
├── tenant-2/                 ← İxtif
│   ├── homepage.blade.php    ← Özel anasayfa
│   └── modules/
│       └── product/
│           └── show.blade.php  ← İsterse override
│
└── simple/                   ← Altın Standart (Fallback)
    ├── homepage.blade.php    ← Varsayılan anasayfa
    ├── layouts/
    │   ├── app.blade.php
    │   ├── header.blade.php
    │   └── footer.blade.php
    └── modules/
        ├── blog/
        │   ├── index.blade.php
        │   └── show.blade.php
        ├── page/
        │   └── show.blade.php
        ├── shop/
        │   ├── index.blade.php
        │   └── show.blade.php
        └── portfolio/
            ├── index.blade.php
            └── show.blade.php

Modüllerin Simple Tema Durumu

Modül index show Diğer Not
Blog tag.blade.php var
Page - Temel var
Shop Cart, checkout eksik olabilir
Portfolio - Temel var
Announcement - Temel var
Favorite - - Kontrol gerekli
ReviewSystem - - Kontrol gerekli
Payment - checkout, success var

Teknik Detaylar

ThemeService

Dosya: app/Services/ThemeService.php

Ana tema yöneticisi. Fallback sistemini çalıştıran servis.

getActiveTheme()        → Tenant'ın aktif temasını döndürür
getThemeViewPath()      → View path'i çözer (fallback dahil)
setupThemeViews()       → View::addLocation() ile tema yolunu ekler
clearThemeCache()       → Redis cache temizler

View Çözümleme Sırası

// Örnek: Blog show sayfası, aktif tema = "ixtif"

1. blog::themes.ixtif.show    → Aranıyor...
2. blog::themes.simple.show   → BULUNDU ✓
3. blog::front.show           → (Kullanılmaz)

Kritik Dosyalar

  • app/Services/ThemeService.php - Tema engine
  • app/Repositories/ThemeRepository.php - Tema repository
  • Modules/ThemeManagement/App/Models/Theme.php - Tema modeli
  • app/Models/Tenant.php - Tenant-tema bağlantısı (theme_id)
  • resources/views/themes/simple/ - Fallback tema

Cache Yapısı

  • Store: Redis
  • Key: theme:tenant_{id}
  • TTL: 1 saat (tenant), 24 saat (default)

Yol Haritası

1

Simple Temasını Mükemmelleştir

Tüm modüller için eksiksiz, güzel tasarımlı simple view'ları oluştur. Bu "altın standart" olacak.

2

Klasör Yapısını Standartlaştır

themes/simple/modules/{modül}/ yapısını tüm modüller için oluştur.

3

Tenant Klasörlerini Düzenle

themes/tenant-1001/, themes/tenant-2/ yapısına geç. Sadece homepage ve override'ları içersin.

4

ThemeService'i Güncelle

Yeni klasör yapısına göre view resolution mantığını güncelle.

5

Test & Dokümantasyon

Tüm tenant'larda test et, yeni tenant ekleme rehberi hazırla.

Sonuç

Mevcut sistem istediğin yapıyı zaten destekliyor. ThemeService fallback mekanizması çalışıyor. Yapılması gereken: Simple temasını "altın standart" haline getirmek ve klasör yapısını standartlaştırmak. Kod değişikliği minimal olacak.