v12 - Single Header Kurali Eklendi

t-{id} Tema Yapisi

Multi-Tenant Tema Sistemi - Single Header, Page Modulu, Spacing, Alpine Collapse

1. Felsefe

t-{id} = Tenant temasi. Sadece ozel dosyalar burada.

simple = Fallback (mevcut, zaten var). t-{id}'de yoksa buradan alir.

Ornek: t-3/homepage.blade.php var -> onu kullan, t-3/blog/show.blade.php yok -> simple'dan al

2. Single Header Kurali

KRITIK v12

Basit Anlatim

Tum sitede TEK BIR HEADER DOSYASI kullanilmali! Homepage dahil her sayfa layouts/header.blade.php dosyasini @include ile cagirmali. Inline header YASAK!

YASAK: Inline Header!

// YANLIS - homepage.blade.php icinde inline header
<!DOCTYPE html>
<html>
<head>...</head>
<body>
    <!-- 150 satir header kodu BURADA -->
    <header>
        <nav>...</nav>
        <!-- Cache butonlari eksik kalabilir! -->
    </header>
    ...
</body>

DOGRU: Layout Extend + Include

{{-- homepage.blade.php --}}
@php
    $isHomepage = true;
@endphp
@extends('themes.t-3.layouts.app')

@section('content')
    {{-- Sadece icerik --}}
@endsection

{{-- layouts/app.blade.php --}}
<body>
    @include('themes.t-3.layouts.header')  <-- TEK HEADER!
    @yield('content')
    @include('themes.t-3.layouts.footer')
</body>

$isHomepage Parametresi

Homepage'de navigasyon anchor (#hizmetler), ic sayfalarda URL (/service). Bunu header'da kontrol et:

{{-- header.blade.php --}}
@php
    $isHomepage = $isHomepage ?? false;
@endphp

<nav>
    <a href="{{ $isHomepage ? '#hizmetler' : url('/service') }}">Hizmetlerimiz</a>
    <a href="{{ $isHomepage ? '#hakkimizda' : url('/page/hakkimizda') }}">Hakkimizda</a>
    <a href="{{ $isHomepage ? '#iletisim' : url('/page/iletisim') }}">Iletisim</a>
</nav>

Single Header Avantajlari

  • Root butonlari (cache/AI) tum sayfalarda gorunur
  • Header degisikligi tek dosyadan yapilir
  • Kod tekrari (duplicate) onlenir
  • Tutarli kullanici deneyimi

3. Page Modulu Ozgurlugu

Basit Anlatim

Page modulu OZGUR olmali! Template sadece wrapper (subheader + container). Her sayfanin kendine ozel tasarimi pages tablosundaki css ve js kolonlarinda saklanir.

YASAK: Template'de Zorla Ekleme!

// YANLIS - Template'e sidebar, CTA, gallery ekleme!
<div class="grid grid-cols-3">
    <div class="col-span-2">{{ $body }}</div>
    <aside class="col-span-1">SIDEBAR ZORLA</aside>  // YASAK!
</div>

// DOGRU - Sadece container, icerik veritabanindan
<div class="page-content">
    @parsewidgets($body ?? '')
</div>
@if($item->css)<style>{!! $item->css !!}</style>@endif
@if($item->js)<script>{!! $item->js !!}</script>@endif

Page show.blade.php Template Yapisi

{{-- SUBHEADER (Breadcrumb + Title) --}}
<section class="bg-gray-50 dark:bg-gray-800 border-b">
    <div class="container mx-auto px-4 py-4">
        <nav>{{ breadcrumb }}</nav>
        <h1>{{ $title }}</h1>
    </div>
</section>

{{-- CONTENT - Sadece container --}}
<section class="bg-white dark:bg-gray-900 py-10">
    <div class="container mx-auto px-4">
        <div class="page-content prose max-w-none">
            @parsewidgets($body ?? '')
        </div>
    </div>
</section>

{{-- CSS/JS veritabanindan --}}
@if($item->css)<style>{!! $item->css !!}</style>@endif
@if($item->js)<script>{!! $item->js !!}</script>@endif

4. Spacing Kurallari

mb-16: Bolumler Arasi

<!-- Her buyuk bolumun sonunda mb-16 -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-16">...</div>
<div class="mb-16"><h2>Degerlerimiz</h2>...</div>

Spacing Ozet

ClassDurumAciklama
mb-16Bolum sonuHer buyuk section'dan sonra
mb-4h2 altindaBaslik ile aciklama arasinda
mb-8Aciklama altindaAciklama ile icerik arasinda
gap-4/6Grid/Flex iciKartlar arasinda

5. Alpine Collapse Plugin

Script Yukleme Sirasi (KRITIK!)

<!-- 1. ONCE Collapse plugin -->
<script defer src="https://unpkg.com/@alpinejs/collapse@3.x.x/dist/cdn.min.js"></script>

<!-- 2. SONRA Ana Alpine -->
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>

6. Kullanici Tercihleri: ISTEMIYORUM!

1. Link Underline'lari

Linklerde alt cizgi OLMAMALI: .page-content a { text-decoration: none !important; }

2. Inline Header

Homepage dahil TUM sayfalar @include('layouts.header') kullanmali. Inline header YASAK!

3. "Odeme Secenekleri" Sorusu

Bu soruyu FAQ'dan ve HER YERDEN kaldir. Panjur tamir sitesi icin anlamsiz.

4. Tutarsiz Bosluklar

Basliklar icerigin altina yapisik olmamali. Tum sayfalarda AYNI bosluk pattern'i kullan.

5. Template'de Zorla Sidebar/CTA

Page modulu FREE olmali. Her sayfaya ayni sidebar, gorsel, numara ekleme.

7. Hero Slider Sistemi

KRITIK: Query Hatasi!

// YANLIS - slug degisebilir!
$homepagePage = Page::where('slug', 'anasayfa')->first();

// DOGRU - is_homepage flag'i kullan
$homepagePage = Page::where('is_homepage', true)->first();

9. Modul View Path'leri

Homepage Konumlari

1. ONCELIKLI (Modules):
Modules/Page/resources/views/themes/t-3/homepage.blade.php

2. Fallback (resources):
resources/views/themes/t-3/homepage.blade.php

10. Root Admin Butonlari

Basit Anlatim

Her temanin header'inda logonun yaninda cache sifirlama ve AI sifirlama butonlari olmali. Sadece root rolu gorebilir.

Konum ve Kod

{{-- header.blade.php - Logo'nun yaninda --}}
@auth
    @if(auth()->user()->hasRole('root'))
    <div class="flex items-center gap-1 ml-2">
        <button @click="fetch('/admin/cache/clear', {...}).then(() => reload())">
            <i class="fa-sync-alt"></i>
        </button>
        <button @click="localStorage.removeItem(...); reload()">
            <i class="fa-robot"></i>
        </button>
    </div>
    @endif
@endauth

Yeni Sayfa Checklist