🎯 Studio FILE Widget Sorunu

📅 Tarih: 2025-12-04 | 🎯 Konu: Studio'da FILE Widget + Settings.json Problemi | 👤 Gerçek Sorun ve Çözüm

🔥 Gerçek Sorun Ne?

Studio'da FILE Widget Boş Settings İle Render Ediliyor

Studio modülünde FILE type widget'lar drag-drop edildiğinde, settings.json dosyası okunmuyor!

Widget view'ı boş bir $settings = [] array'i ile render ediliyor.

📍 Kod Seviyesinde Sorun

// BlockService.php - prepareWidgetContent() methodunda: case 'file': if (!empty($widget->file_path)) { $viewPath = 'widgetmanagement::blocks.' . $widget->file_path; if (View::exists($viewPath)) { // ❌ SORUN: Settings boş array! $content = View::make($viewPath, ['settings' => []])->render(); } } break;

🎭 Bu Ne Demek?

❌ Şu An Ne Oluyor
  • Hero widget Studio'ya ekleniyor
  • ['settings' => []] boş array geçiliyor
  • View'da: $settings['title_line1'] → boş
  • Widget içi tüm değişkenler boş gösteriliyor
  • Settings.json dosyası hiç okunmuyor!
✅ Olması Gereken
  • Settings.json dosyası okunmalı
  • Default değerler yüklenmeli
  • View'a gerçek settings geçilmeli
  • Widget içeriği düzgün gösterilmeli
  • Kullanıcı settings'leri düzenleyebilmeli

💡 Hero Widget Örneği

Hero widget'a settings.json ekledik ama: Studio'da hero widget'ı kullanırken settings.json dosyası okunmadığı için widget boş görünüyor!

Hero Settings.json (17 field var)

{ "title_line1": { "type": "text", "default": "Endüstriyel Ekipman" }, "title_line2": { "type": "text", "default": "Çözümleri" }, "description": { "type": "textarea", "default": "..." }, "cta_text": { "type": "text", "default": "Hemen Keşfet" }, "cta_url": { "type": "text", "default": "/urunler" }, "hero_image": { "type": "media" }, "feature_1_title": { "type": "text", "default": "Hızlı Teslimat" }, ... }

Hero View.blade.php (Settings kullanıyor)

<h1> @if(!empty($settings['title_line1'])) <span>{{ $settings['title_line1'] }}</span> @endif </h1> <!-- ❌ Studio'da: $settings boş olduğu için hiçbir şey gösterilmiyor! -->

❓ Asıl Sorularım

Soru 1: Settings.json Nasıl Yüklenecek?

  • Studio'da FILE widget drag-drop edilince settings.json okunmalı mı?
  • Default değerler widget'a otomatik yüklenmeli mi?
  • Settings dosyası nereden okunacak?

Soru 2: Settings Nasıl Düzenlenecek?

  • Studio'da FILE widget seçilince → Settings formu mu gösterilmeli?
  • GrapesJS trait panel'inde mi gösterilmeli?
  • Ayrı bir "Settings" modal'ı mı açılmalı?
  • WidgetFormBuilderComponent burada kullanılmalı mı?

Soru 3: FILE Widget Türlerini Ayıralım Mı?

  • FILE-STATIC: Settings yok, sadece view var (layout widget'lar gibi)
  • FILE-DYNAMIC: Settings.json var, form builder ile düzenlenir (hero, form gibi)
  • Database'e yeni field: has_settings veya supports_form_builder?

Soru 4: Boş FILE Widget'ları Nasıl Tamamlarız?

  • 32 widget boş (sadece view var)
  • Hero-1, simple, contact-form vb. için settings.json oluşturulmalı mı?
  • Öncelik sırası ne olmalı?

💡 Çözüm Önerileri

Çözüm 1: BlockService'de Settings Yükleme Ekle

Ne yapılacak: FILE widget render edilirken settings.json dosyasını oku ve default değerleri yükle

case 'file': if (!empty($widget->file_path)) { $viewPath = 'widgetmanagement::blocks.' . $widget->file_path; // ✅ Settings.json dosyasını oku $settings = $this->loadWidgetSettings($widget); if (View::exists($viewPath)) { $content = View::make($viewPath, ['settings' => $settings])->render(); } } break;

Avantaj: Widget'lar default değerlerle gösterilir, boş kalmaz

Çözüm 2: Studio'da Settings Editor Ekle

Ne yapılacak: FILE widget seçilince sağ panelde settings formu göster

  • GrapesJS trait panel kullan
  • Settings.json'dan field'ları oku
  • Dinamik form oluştur
  • Kullanıcı değiştirince widget'ı yeniden render et

Avantaj: Kullanıcı settings'leri Studio içinde düzenleyebilir

Çözüm 3: Database'e Flag Ekle

Ne yapılacak: Widget'ların hangileri settings destekliyor ayırt et

// Migration ALTER TABLE widgets ADD COLUMN supports_settings BOOLEAN DEFAULT 0; // Hero, Form, Cards → supports_settings = 1 // Layout, Basit widget'lar → supports_settings = 0

Avantaj: Studio'da hangi widget'larda settings editor gösterileceği belli olur

🎯 Adım Adım Yapılacaklar

1. BlockService'i Güncelle (Acil)

  • Settings.json okuma fonksiyonu ekle
  • Default değerleri yükle
  • FILE widget render'da settings kullan

2. Studio Settings Editor Ekle (Önemli)

  • GrapesJS trait panel'e settings formu ekle
  • Settings.json field'larını dinamik göster
  • Kullanıcı değiştirince widget'ı güncelle

3. Boş Widget'ları Tamamla

  • Hero-1, simple → settings.json ekle
  • Contact-form → settings.json ekle
  • Cards, features → items.json + settings.json ekle

4. Database Flag Ekle (Opsiyonel)

  • supports_settings field ekle
  • Mevcut widget'ları güncelle
  • Studio'da flag'e göre settings editor göster/gizle

✅ Sonuç

Ana Sorun: Studio'da FILE widget'lar settings.json dosyasını okumadan render ediliyor. Bu yüzden widget'lar boş görünüyor ve kullanıcı settings'leri düzenleyemiyor.

Çözüm: BlockService'e settings yükleme ekle + Studio'ya settings editor ekle + Boş widget'ları settings.json ile tamamla.

Bu şekilde hem mevcut Hero widget düzgün çalışır, hem de diğer FILE widget'lar için de aynı sistem kullanılabilir.