Multi-Tenant Tema Sistemi - Single Header, Page Modulu, Spacing, Alpine Collapse
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
Tum sitede TEK BIR HEADER DOSYASI kullanilmali! Homepage dahil her sayfa layouts/header.blade.php dosyasini @include ile cagirmali. Inline header YASAK!
// 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>
{{-- 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>
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>
Page modulu OZGUR olmali! Template sadece wrapper (subheader + container). Her sayfanin kendine ozel tasarimi pages tablosundaki css ve js kolonlarinda saklanir.
// 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
{{-- 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
<!-- 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>
| Class | Durum | Aciklama |
|---|---|---|
mb-16 | Bolum sonu | Her buyuk section'dan sonra |
mb-4 | h2 altinda | Baslik ile aciklama arasinda |
mb-8 | Aciklama altinda | Aciklama ile icerik arasinda |
gap-4/6 | Grid/Flex ici | Kartlar arasinda |
<!-- 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>
Linklerde alt cizgi OLMAMALI: .page-content a { text-decoration: none !important; }
Homepage dahil TUM sayfalar @include('layouts.header') kullanmali. Inline header YASAK!
Bu soruyu FAQ'dan ve HER YERDEN kaldir. Panjur tamir sitesi icin anlamsiz.
Basliklar icerigin altina yapisik olmamali. Tum sayfalarda AYNI bosluk pattern'i kullan.
Page modulu FREE olmali. Her sayfaya ayni sidebar, gorsel, numara ekleme.
// YANLIS - slug degisebilir! $homepagePage = Page::where('slug', 'anasayfa')->first(); // DOGRU - is_homepage flag'i kullan $homepagePage = Page::where('is_homepage', true)->first();
Logo varsa SADECE logo gosterilir. Logo yoksa icon + site adi.
$logoService = app(\App\Services\LogoService::class);
$logos = $logoService->getLogos();
$hasLogo = $logos['has_light'] || $logos['has_dark'];
@if($hasLogo)
<img src="{{ $logos['light_logo_url'] }}" class="dark:hidden h-10">
<img src="{{ $logos['dark_logo_url'] }}" class="hidden dark:block h-10">
@else
<i class="fa-blinds"></i>
<span>{{ $siteName }}</span>
@endif
1. ONCELIKLI (Modules): Modules/Page/resources/views/themes/t-3/homepage.blade.php 2. Fallback (resources): resources/views/themes/t-3/homepage.blade.php