Multi-Tenant Tema Sistemi - Kapsamli Referans Dokumani
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
resources/views/themes/{tema}/{view}
Ana tema klasoru - TEK DOSYA PRENSIBI - ONCELIKLI!
Modules/{Modul}/views/themes/{tema}/{view}
Modul ici tema - Fallback (resources'da yoksa)
Modules/{Modul}/views/themes/simple/{view}
Simple tema fallback - MODUL ICINDE
{modul}::front.{view}
Son care - Modul front klasoru
Tum sayfalarda ayni container genisligi kullanilmali. ixtif.com header genisligi referans alinmistir.
{{-- TUM sayfalar bu container'i kullanmali --}} <div class="container mx-auto px-4 sm:px-4 md:px-2"> ... </div> // Mobil (0-767px): px-4 (16px) // Tablet (768px+): px-4 (16px) // Desktop (md/768px+): px-2 (8px) - daha dar padding
{{-- YANLIS! Fazla padding, tutarsiz --}} <div class="container mx-auto px-3 sm:px-6 md:px-8 lg:px-12 xl:px-16 2xl:px-20"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> {{-- DOGRU! --}} <div class="container mx-auto px-4 sm:px-4 md:px-2">
Gradient header KALDIRILDI! Yerine minimal subheader: Breadcrumb + H1 baslik, gri arkaplan.
{{-- MINIMAL SUBHEADER --}} <section class="bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700"> <div class="container mx-auto px-4 sm:px-4 md:px-2 py-4"> {{-- Breadcrumb --}} <nav class="text-sm text-gray-500 dark:text-gray-400 mb-2"> @foreach($breadcrumbsArray as $index => $crumb) ... @endforeach </nav> {{-- H1 Baslik --}} <h1 class="text-2xl md:text-3xl font-bold font-heading text-gray-900 dark:text-white"> {{ $title }} </h1> </div> </section>
Header ve navigasyon icin xl (1280px) breakpoint kullaniyoruz. lg (1024px) kullanmak tablet boyutlarinda sorunlara yol acar!
| Class | Piksel | Kullanim |
|---|---|---|
sm: | 640px | Buyuk telefonlar |
md: | 768px | Tablet dikey |
lg: | 1024px | Tablet yatay / Kucuk laptop |
xl: | 1280px | HEADER BREAKPOINT! |
2xl: | 1536px | Buyuk ekranlar |
Grid yapisi modul tipine gore degisir. Gorsel agirlikli modullerde 2 kolon, text agirlikli modullerde 1 kolon mobilde daha okunabilir.
Sadece gorsel + baslik, az text
| Service | grid-cols-2 md:grid-cols-3 |
| Portfolio | grid-cols-2 md:grid-cols-3 |
| Galeri | grid-cols-2 md:grid-cols-3 lg:grid-cols-4 |
Baslik + aciklama + tarih + okuma suresi
| Blog | grid-cols-1 md:grid-cols-2 lg:grid-cols-3 |
| Page | grid-cols-1 md:grid-cols-2 lg:grid-cols-3 |
| Announcement | grid-cols-1 md:grid-cols-2 lg:grid-cols-3 |
{{-- Icerik alanlari icin --}} <div class="prose prose-base max-w-none font-body dark:prose-invert prose-headings:font-heading prose-headings:text-gray-900 prose-p:text-gray-600 dark:prose-p:text-gray-300 prose-a:text-primary-600 hover:prose-a:underline"> @parsewidgets($body ?? '') </div>
Sayfalar daha hizli acilir, site uygulama olarak yuklenebilir ve offline calisabilir. Tum bunlar otomatik olarak hem t-3 hem simple temalarda aktif.
Link'lere mouse ile geldiginde sayfa arka planda onceden yuklenir.
Tarayicida "Uygulamayi Yukle" butonu gosterir.
Sayfalari onbellege alir, offline destek saglar.
Sitede dinamizm ve guzellik icin hover efektleri, animasyonlu gradient text, ikon gecisleri kullanilir. Ancak ASLA scale/zoom/ziplama efekti KULLANMA - sadece renk, border ve shadow degisimi!
Tum gorsellerde loading="lazy" attribute kullan. Hero haric!
hover:scale-*, hover:-translate-y-* - KULLANMA!
Sadece: hover:border-primary-500, hover:shadow-lg
Top Bar
Telefon, WhatsApp, calisma saatleri
Main Header (sticky)
Logo, navigasyon, dark mode toggle
Mobile Menu (xl:hidden)
x-show ile acilir/kapanir
| Key | Aciklama |
|---|---|
contact_phone_1 | Ana telefon (sabit) |
contact_phone_2 | Mobil telefon |
contact_whatsapp_1 | WhatsApp numarasi |
contact_email_1 | E-posta |
@php
$logoService = app(\App\Services\LogoService::class);
$logos = $logoService->getLogos();
@endphp
@if($logos['has_light'] && $logos['has_dark'])
<img src="{{ $logos['light_logo_url'] }}" class="dark:hidden h-10">
<img src="{{ $logos['dark_logo_url'] }}" class="hidden dark:block h-10">
@endif
11 Altin Kural Formulu + Site Renk Entegrasyonu
Leonardo AI, siteler icin profesyonel gorseller ureten yapay zeka sistemidir. Basit bir aciklama verirsin ("Forklift depo ici"), sistem bunu 11 Altin Kural ile gercek fotograf gibi gorunen detayli bir talimata cevirir.
Neden Onemli? AI urettigi belli olmayan, profesyonel, markasiz gorseller. Stok fotograf satin almaya gerek yok. Her gorsel tenant'a ozel, sektore uygun.
AI urettigi BELLI OLMAYAN, gercek fotograf gibi gorunen gorseller icin ZORUNLU kurallar
AI'yi fotograf moduna sokar
"Photo of", "Editorial photograph of", "Documentary shot of"
Mikro hikaye - konu NE YAPIYOR
YANLIS: "forklift"
DOGRU: "forklift operator maneuvering pallets"
Mekan + zaman/mevsim
"industrial warehouse on foggy winter morning"
Cekim acisi + amac
"low angle emphasizing power", "eye-level for intimacy"
Kompozisyon teknigi
"rule of thirds", "golden ratio", "leading lines"
Detayli isik kurulumu
"golden hour side light", "Rembrandt 3:1 ratio"
Spesifik ekipman + bokeh
"Canon EOS R5, 85mm f/1.4L, creamy bokeh"
Analog film referansi - AI gorunumunu KIRAR
"Kodak Portra 400 warm", "Fuji Velvia vivid"
Kusurlar - MUKEMMEL = SAHTE!
"lens dust", "slight vignetting", "film grain", "micro chromatic aberration"
Atmosfer + duygu
"quiet determination", "nostalgic warmth", "tense anticipation"
Renk grading - AI steril gorunumunu KIRAR
"cinematic teal and orange", "lifted blacks", "crushed shadows"
Nasil Calisir? Site logosundaki ana renkler analiz edilir ve gorsellerde DETAYLARDA kullanilir.
Logo Renkleri:
Prompt'a Eklenen: "with subtle blue and orange accent details matching brand colors, industrial equipment with blue safety markings"
| Boyut: | 1472x832 |
| Oran: | Yatay (16:9 yakin) |
| Kullanim: | Anasayfa, Landing page |
| Style: | cinematic |
| Boyut: | 1024x1024 |
| Oran: | Kare (1:1) |
| Kullanim: | Service kartlari |
| Style: | stock_photo |
| Boyut: | 1472x832 |
| Oran: | Yatay |
| Kullanim: | Icerik kartlari |
| Style: | cinematic / dynamic |
BASIT (Kullanici girer):
"Forklift depo ici"
11 KURAL (Sistem uretir):
Photo of forklift operator carefully maneuvering loaded pallets through narrow aisle, industrial warehouse on foggy winter morning with condensation on windows, low angle emphasizing power and scale, rule of thirds with subject at intersection, golden hour side light with long shadows, shot on Canon EOS R5 85mm f/1.4L creamy bokeh, Kodak Portra 400 warm tones, subtle lens dust and slight vignetting with micro chromatic aberration, conveying industrial efficiency and focused concentration, cinematic teal and orange grading with lifted blacks. Generic unbranded equipment, no manufacturer logos. NO text NO watermarks.
BASIT:
"Acik ocak madencilik"
11 KURAL + MARKA RENKLERI:
Editorial photograph of open pit mining operation with heavy machinery extracting minerals, vast quarry landscape at golden hour with dust particles catching warm light, high angle drone perspective showing scale of operation, leading lines from access roads drawing eye to excavation center, dramatic side lighting with long shadows across terraced walls, shot on Sony A7RV 24-70mm f/2.8 moderate DoF for environmental context, Kodak Ektar 100 saturated vivid colors, atmospheric dust particles and slight lens flare with natural film grain, conveying industrial power and determined progress, warm vintage tones with subtle blue and orange accents in safety equipment and machinery details matching brand colors. Generic mining equipment, no company logos visible. NO text NO labels.
Gorselleri Claude uretecek - Leonardo AI API uzerinden
Media tablosuna eklenecek - Spatie Media Library ile
11 Altin Kural uygulanacak - AIPromptEnhancer ile otomatik
Site renkleri kullanilacak - Logo analizi ile detaylarda
| Service Class: | App\Services\Media\LeonardoAIService |
| Prompt Enhancer: | Modules\AI\App\Services\AIPromptEnhancer |
| Auto Cover Job: | Modules\MediaManagement\App\Jobs\GenerateAICover |
| Leonardo Model: | lucid-origin |
| GPT Model (Enhancer): | gpt-4o |
| Helper Function: | generate_ai_cover($model, 'Baslik', 'type') |
// Service modulu icin otomatik hero gorseli $service = Service::create(['title' => 'Forklift Kiralama']); // Queue'ya otomatik AI gorsel uretimi ekle generate_ai_cover($service, $service->title, 'service'); // Veya manuel tetikleme GenerateAICover::dispatch( Service::class, $service->id, 'Forklift Kiralama', 'service' )->onQueue('muzibu_my_playlist');
Bu kelimeler AI urettigi BELLI EDER - ASLA KULLANMA:
photorealistic
hyper-realistic
8K
ultra HD
4K resolution
highly detailed
masterpiece
perfect
Page modulu, sitedeki statik sayfalari yonetir: Hakkimizda, Iletisim, Gizlilik Politikasi, Sozlesmeler vb. Her sayfa bagimsiz bir URL'e sahiptir ve SEO ayarlari yapilabilir.
| Alan | Tip | Aciklama |
|---|---|---|
title | JSON (multi-lang) | Sayfa basligi |
slug | JSON (multi-lang) | URL slug'i |
body | JSON (multi-lang) | HTML icerik (TinyMCE) |
css | TEXT | Ozel CSS (opsiyonel) |
js | TEXT | Ozel JS (opsiyonel) |
is_active | BOOLEAN | Aktif/Pasif |
is_homepage | BOOLEAN | Anasayfa mi? |
hero - Kapak gorseli (1 adet)gallery - Galeri (max 50 adet)/sayfalar/{slug}
Slug admin'den degistirilebilir (ModuleSlugService)
Page icin hero gorseli Claude tarafindan uretilir:
// Ornek: "Hakkimizda" sayfasi icin generate_ai_cover($page, 'Hakkimizda - Sirket Tanitimi', 'page'); // Boyut: 1472x832 (hero) // Style: cinematic // 11 Altin Kural otomatik uygulanir
Service modulu, sirketin sundugu hizmetleri sergiler. Her hizmetin ayri sayfasi, gorseli ve kategorisi olabilir. "Hizmetlerimiz" sayfasinda kart gorunumunde listelenir.
| Alan | Tip | Aciklama |
|---|---|---|
title | JSON (multi-lang) | Hizmet adi |
slug | JSON (multi-lang) | URL slug'i |
body | JSON (multi-lang) | Detayli aciklama (HTML) |
is_active | BOOLEAN | Aktif/Pasif |
service_category_id | INTEGER | Kategori ID (nullable) |
hero - Hizmet gorseli (1 adet, KARE 1024x1024)gallery - Ek gorseller (max 50)/hizmetlerimiz/{slug}
Varsayilan: /hizmetlerimiz, degistirilebilir
Hizmetler kategorilere ayrilabilir:
Her hizmet icin KARE (1024x1024) gorsel uretilir:
// Ornek hizmetler icin gorsel uretimi generate_ai_cover($service, 'Forklift Kiralama', 'service'); generate_ai_cover($service, 'Transpalet Bakimi', 'service'); generate_ai_cover($service, 'Lojistik Danismanlik', 'service'); // Boyut: 1024x1024 (KARE - kart gorunumu icin) // Style: stock_photo // Site renkleri: Detaylarda kullanilir
Baslik (title):
"Madencilik Hizmetleri"
Slug (otomatik):
"madencilik-hizmetleri"
Icerik (body) - TinyMCE ile girilir:
Sirketimiz, acik ocak madencilik, yeraltı madenciligi, mineral isleme ve cevher zenginlestirme alanlarinda profesyonel hizmetler sunmaktadir...
Blog modulu, haber, makale ve icerik paylasimi icin kullanilir. Zamanlanmis yayinlama, kategori, etiket, SSS (FAQ) ve HowTo schema destegi vardir. SEO icin en zengin modul.
| Alan | Tip | Aciklama |
|---|---|---|
title | JSON | Yazi basligi |
slug | JSON | URL slug'i |
body | JSON | Ana icerik (HTML) |
excerpt | JSON | Kisa ozet (SEO icin) |
published_at | DATETIME | Yayinlanma tarihi (zamanlanabilir) |
is_featured | BOOLEAN | One cikan mi? |
is_active | BOOLEAN | Aktif/Taslak |
blog_category_id | INTEGER | Kategori ID |
faq_data | JSON | SSS verileri (FAQ Schema) |
howto_data | JSON | Nasil yapilir adimları (HowTo Schema) |
hero - Kapak (1472x832)gallery - Galericategory() - Kategoritags() - Etiketler (MorphToMany)/blog/{slug}
/blog/category/{cat}
YAYINDA
is_active = true
published_at = null veya gecmis
ZAMANLANMIS
is_active = true
published_at = gelecek tarih
TASLAK
is_active = false
Blog yaziları icin YATAY (1472x832) kapak gorseli:
// Her blog icin kapak gorseli generate_ai_cover($blog, 'Madencilik Sektorunde Yenilikler', 'blog'); // Boyut: 1472x832 (yatay, 16:9 yakin) // Style: cinematic veya dynamic // Icerige uygun tema otomatik belirlenir
Kullanici icerik metnini verir, Claude sisteme girer, gorsel uretir ve media tablosuna kaydeder.
Hizmet/sayfa/blog icin baslik ve icerik metni saglanir
"Madencilik Hizmetleri - Acik ocak ve yeraltı madenciliginde uzman cozumler..."
Livewire component uzerinden veritabanina kaydeder
Service::create(['title' => [...], 'body' => [...], 'is_active' => true])
11 Altin Kural ile prompt olusturulur, Leonardo API'ye gonderilir
generate_ai_cover($service, 'Madencilik Hizmetleri', 'service')
Spatie Media Library ile model'e attach edilir
$service->addMediaFromUrl($imageUrl)
->usingFileName('service-' . $service->id . '.webp')
->withCustomProperties(['generation_source' => 'ai_generated'])
->toMediaCollection('hero');
Meta title, description, OG tags otomatik veya manuel ayarlanir
| Ozellik | Page | Service | Blog |
|---|---|---|---|
| Kategori | |||
| Etiketler (Tags) | |||
| Zamanlanmis Yayin | |||
| FAQ Schema | |||
| HowTo Schema | |||
| Anasayfa Olabilir | |||
| Gorsel Boyutu | 1472x832 | 1024x1024 | 1472x832 |