🗺️ Theme Fallback Sistemi

Cart / Checkout / Payment Sayfalarının Çalışma Mantığı

🎯 Ana Konsept

🖼️

LAYOUT

Header + Footer

Tenant temasından gelir

themes/ixtif/layouts/app.blade.php
📄

VIEW (İçerik)

Orta Kısım (Content)

Module default'tan gelir

Modules/Cart/resources/views/

📐 Sayfa Yapısı

🔵 HEADER
themes/ixtif/layouts/header.blade.php
🟢 İÇERİK (CART / CHECKOUT / PAYMENT)
Modules/Cart/resources/views/livewire/front/cart-page.blade.php
{{ $slot }} ile enjekte edilir
🔵 FOOTER
themes/ixtif/layouts/footer.blade.php
Tenant Teması (ixtif)
Module Default

🔄 Çalışma Akışı

1

Kullanıcı ixtif.com/cart'a girer

Route: cart.index → CartPage::class (Livewire)
2

CartPage render() çalışır

a) $theme = tenant()->theme "ixtif"
b) $layoutPath = "themes.ixtif.layouts.app"
c) view('cart::livewire.front.cart-page')
3

Layout çözümlenir

LAYOUT (themes.ixtif.layouts.app)
→ header.blade.php
→ footer.blade.php
→ notification.blade.php
VIEW (cart::livewire.front.cart-page)
→ Modules/Cart/resources/views/
   livewire/front/cart-page.blade.php
4

{{ $slot }} ile birleşir

Layout'taki {{ $slot }} yerine cart içeriği enjekte edilir

@include('themes.ixtif.layouts.header')
{{ $slot }} ← Cart içeriği buraya
@include('themes.ixtif.layouts.footer')

🏢 Tenant Karşılaştırması

🏭 İxtif

Tenant ID: 2
Theme ID: 2
Theme Folder: ixtif

Layout:
themes/ixtif/layouts/app
Cart View:
cart::livewire.front.cart-page

🎵 Muzibu

Tenant ID: 1001
Theme ID: 7
Theme Folder: muzibu

Layout:
themes/muzibu/layouts/app
Cart View:
cart::livewire.front.cart-page

📦 Simple (Fallback)

Tenant ID: -
Theme ID: -
Theme Folder: simple

Kullanım:
Tenant layout yoksa devreye girer

📁 Dosya Yapısı

resources/views/themes/
├── ixtif/                          # İxtif Teması
│   └── layouts/
│       ├── app.blade.php              # Ana layout
│       ├── header.blade.php           # Header
│       └── footer.blade.php           # Footer
│
├── muzibu/                         # Muzibu Teması
│   └── layouts/
│       ├── app.blade.php              # Ana layout
│       ├── header.blade.php           # Header
│       └── footer.blade.php           # Footer
│
└── simple/                         # Fallback Tema
    └── layouts/
        ├── app.blade.php              # Fallback layout
        ├── header.blade.php
        └── footer.blade.php

Modules/
├── Cart/
│   └── resources/views/livewire/front/
│       ├── cart-page.blade.php        # ← TÜM TENANT'LAR KULLANIR
│       └── checkout-page.blade.php   # ← TÜM TENANT'LAR KULLANIR
│
└── Payment/
    └── resources/views/livewire/front/
        └── payment-page.blade.php     # ← TÜM TENANT'LAR KULLANIR
                

💻 Kod: CartPage render()


public function render()
{
    // 1. Tenant temasını al (accessor: theme_id → folder_name)
    $theme = tenant()->theme ?? 'simple';

    // 2. Layout path'i oluştur
    $layoutPath = "themes.{$theme}.layouts.app";

    // 3. Layout yoksa simple'a fallback
    if (!view()->exists($layoutPath)) {
        $layoutPath = 'themes.simple.layouts.app';
    }

    // 4. View her zaman module default
    return view('cart::livewire.front.cart-page')
        ->layout($layoutPath);
}
                

✅ Özet

Layout (Header/Footer)

  • Tenant temasından gelir
  • İxtif → ixtif header/footer
  • Muzibu → muzibu header/footer
  • Tema yoksa → simple fallback

View (İçerik)

  • Module default'tan gelir
  • Cart → Modules/Cart/views/
  • Payment → Modules/Payment/views/
  • Tüm tenant'lar aynı içeriği kullanır