📁 FILE Widget Organizasyon Sistemi

📅 Tarih: 2025-12-04 | 🎯 Konu: FILE + Settings/Items Kombinasyonu - Best Practices | 📋 Standartlar ve Organizasyon

🎯 FILE Widget Türleri (4 Tip)

Yeni Sistem: FILE widget'ları 4 kategoriye ayırıyoruz. Her kategori farklı kullanım amacına sahip.

1. FILE-STATIC

Sadece View

Sadece HTML view var, settings/items yok

  • Layout widget'lar (two-columns, grid vb.)
  • Basit container'lar
  • Statik HTML blokları
layout/two-columns/ ├── view.blade.php ✅ Sadece bu

2. FILE-SETTINGS

View + Settings

View + settings.json var, döngü yok

  • Hero widget'lar (tek banner)
  • Form widget'lar (tek form)
  • CTA blokları
hero/ixtif-hero/ ├── view.blade.php └── settings.json ✅ Default değerler

3. FILE-ITEMS

View + Items

View + items.json var, döngü için

  • Card grid'leri (çoklu kart)
  • Slider'lar (çoklu slide)
  • Testimonial listeleri
cards/basic/ ├── view.blade.php └── items.json ✅ Döngü field'ları

4. FILE-FULL

View + Settings + Items

View + settings.json + items.json var

  • Hero Slider (genel settings + slide items)
  • Product Showcase (başlık + ürün listesi)
  • Kompleks widget'lar
slider/hero-slider/ ├── view.blade.php ├── settings.json ✅ Genel ayarlar └── items.json ✅ Slide'lar

🏠 Hero Widget Nerede Kalmalı?

✅ Önerilen Konum

WidgetManagement/resources/views/blocks/hero/

Tüm FILE widget'lar WidgetManagement modülünde kalmalı. Çünkü:

  • Widget Management sistemin merkezi
  • Studio buradan yüklüyor
  • Tüm widget'lar tek yerden yönetiliyor
  • Database de WidgetManagement'a bağlı

📂 Hero Folder Yapısı

WidgetManagement/resources/views/blocks/hero/ ├── ixtif-hero/ # Tenant-specific (ixtif.com için) │ ├── view.blade.php │ └── settings.json │ ├── hero-modern/ # Generic (tüm tenant'lar için) │ ├── view.blade.php │ └── settings.json │ ├── hero-minimal/ # Generic │ ├── view.blade.php │ └── settings.json │ └── hero-slider/ # FILE-FULL (settings + items) ├── view.blade.php ├── settings.json # Genel ayarlar (başlık, animasyon vb.) └── items.json # Slide'lar (her slide için)

📝 İsimlendirme Kuralları

Kategori İsimlendirme Örnek Açıklama
Tenant-Specific {tenant}-{widget} ixtif-hero
muzibu-player
Sadece o tenant için
Generic {widget}-{variant} hero-modern
hero-minimal
Tüm tenant'lar kullanabilir
Simple {widget}-{type} two-columns
three-columns
Basit, schema'sız
Complex {widget}-{feature} hero-slider
product-showcase
Settings + Items birlikte

🗂️ Tam Klasör Yapısı

WidgetManagement/resources/views/blocks/ │ ├── hero/ # Hero widget'lar (FILE-SETTINGS) │ ├── ixtif-hero/ # Tenant-specific │ │ ├── view.blade.php │ │ └── settings.json │ ├── hero-modern/ # Generic │ │ ├── view.blade.php │ │ └── settings.json │ └── hero-slider/ # FILE-FULL │ ├── view.blade.php │ ├── settings.json │ └── items.json │ ├── form/ # Form widget'lar (FILE-SETTINGS) │ ├── contact-form/ │ │ ├── view.blade.php │ │ └── settings.json # Form field'ları │ └── newsletter-form/ │ ├── view.blade.php │ └── settings.json │ ├── cards/ # Card widget'lar (FILE-ITEMS) │ ├── basic/ │ │ ├── view.blade.php │ │ └── items.json # Kart listesi │ └── grid/ │ ├── view.blade.php │ └── items.json │ ├── slider/ # Slider widget'lar (FILE-FULL) │ └── basic-slider/ │ ├── view.blade.php │ ├── settings.json # Animasyon, hız vb. │ └── items.json # Slide'lar │ ├── features/ # Özellik listeleri (FILE-ITEMS) │ └── basic/ │ ├── view.blade.php │ └── items.json # Özellikler │ ├── testimonials/ # Referanslar (FILE-ITEMS) │ └── basic/ │ ├── view.blade.php │ └── items.json # Müşteri yorumları │ └── layout/ # Layout'lar (FILE-STATIC) ├── two-columns/ │ └── view.blade.php # Sadece view, schema yok ├── three-columns/ │ └── view.blade.php └── grid/ └── view.blade.php

🗄️ Database Yapısı

Önerilen Database Field'ları

Widget'ların hangi schema'yı kullandığını belirtmek için:

// widgets tablosu 'has_items' => boolean, // ✅ Zaten var 'has_settings' => boolean, // ✅ YENİ - settings.json var mı? // Örnekler: ixtif-hero: has_settings=1, has_items=0 // FILE-SETTINGS basic-slider: has_settings=1, has_items=1 // FILE-FULL cards/basic: has_settings=0, has_items=1 // FILE-ITEMS two-columns: has_settings=0, has_items=0 // FILE-STATIC

Migration

// Migration: add_has_settings_to_widgets.php Schema::table('widgets', function (Blueprint $table) { $table->boolean('has_settings')->default(0)->after('has_items'); }); // Mevcut widget'ları güncelle DB::table('widgets')->where('slug', 'ixtif-hero')->update(['has_settings' => 1]); DB::table('widgets')->where('slug', 'contact-form')->update(['has_settings' => 1]); DB::table('widgets')->where('slug', 'hero-slider')->update(['has_settings' => 1, 'has_items' => 1]);

🎨 Studio Entegrasyonu

Studio'da Görünüm

Studio, widget'ları kategorilere göre gösterir:

Widget Type Studio'da Gösterim Settings Editor Items Editor
FILE-STATIC Drag-drop → Direkt yerleşir ❌ Yok ❌ Yok
FILE-SETTINGS Drag-drop → Default değerlerle yerleşir ✅ Trait panel'de göster ❌ Yok
FILE-ITEMS Drag-drop → Boş liste ile yerleşir ❌ Yok ✅ Items editor göster
FILE-FULL Drag-drop → Settings + boş liste ✅ Trait panel'de göster ✅ Items editor göster

📋 Örnek Schema'lar

1. FILE-SETTINGS (Hero Widget)

// hero/ixtif-hero/settings.json { "title": { "type": "text", "label": "Ana Başlık", "default": "Endüstriyel Ekipman" }, "description": { "type": "textarea", "label": "Açıklama", "default": "..." }, "cta_url": { "type": "text", "label": "Buton URL", "default": "/urunler" } }

2. FILE-ITEMS (Cards Widget)

// cards/basic/items.json { "title": { "type": "text", "label": "Kart Başlığı" }, "description": { "type": "textarea", "label": "Kart Açıklaması" }, "image": { "type": "media", "label": "Kart Görseli" }, "link": { "type": "text", "label": "Link URL" } }

3. FILE-FULL (Hero Slider)

// slider/hero-slider/settings.json (Genel ayarlar) { "animation": { "type": "select", "label": "Animasyon", "options": ["fade", "slide"], "default": "fade" }, "speed": { "type": "number", "label": "Hız (ms)", "default": 3000 } } // slider/hero-slider/items.json (Her slide için) { "title": { "type": "text", "label": "Slide Başlığı" }, "image": { "type": "media", "label": "Slide Görseli" }, "link": { "type": "text", "label": "Link URL" } }

✅ Özet - Best Practices

1. Hero Widget Konumu

WidgetManagement/resources/views/blocks/hero/ixtif-hero/

Tüm FILE widget'lar WidgetManagement modülünde kalmalı.

2. FILE Widget Türleri

  • FILE-STATIC: Sadece view (layout'lar)
  • FILE-SETTINGS: View + settings.json (hero, form)
  • FILE-ITEMS: View + items.json (cards, slider)
  • FILE-FULL: View + settings + items (kompleks)

3. İsimlendirme

  • Tenant-specific: ixtif-hero
  • Generic: hero-modern

4. Database

Yeni field ekle: has_settings (boolean)

Studio bu flag'lere göre settings/items editor gösterir.

5. Studio Entegrasyonu

  • BlockService settings.json'u otomatik yükler ✅
  • Widget default değerlerle render edilir ✅
  • Kullanıcı Studio'da trait panel ile düzenler
  • Kaydet → Güncel değerlerle HTML oluşturulur