Sadece HTML view var, settings/items yok
View + settings.json var, döngü yok
View + items.json var, döngü için
View + settings.json + items.json var
WidgetManagement/resources/views/blocks/hero/
Tüm FILE widget'lar WidgetManagement modülünde kalmalı. Çünkü:
| Kategori | İsimlendirme | Örnek | Açıklama |
|---|---|---|---|
| Tenant-Specific | {tenant}-{widget} |
ixtif-heromuzibu-player |
Sadece o tenant için |
| Generic | {widget}-{variant} |
hero-modernhero-minimal |
Tüm tenant'lar kullanabilir |
| Simple | {widget}-{type} |
two-columnsthree-columns |
Basit, schema'sız |
| Complex | {widget}-{feature} |
hero-sliderproduct-showcase |
Settings + Items birlikte |
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: 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, 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 |
// 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"
}
}
// 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"
}
}
// 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"
}
}
WidgetManagement/resources/views/blocks/hero/ixtif-hero/
Tüm FILE widget'lar WidgetManagement modülünde kalmalı.
ixtif-herohero-modernYeni field ekle: has_settings (boolean)
Studio bu flag'lere göre settings/items editor gösterir.