Ne Yapıyoruz?
Muzibu orta alanını (main) saate, sektöre ve gösterildiği sayfaya (anasayfa, sektör, radyo, genre vb.) göre değişen bir sisteme çeviriyoruz.
Admin panelden "Koleksiyon" denen gruplar oluşturulacak. Her koleksiyonun içine Playlist, Albüm, Radyo, Genre veya Sektör eklenebilecek.
Örnek: "Sabah Kafe Mix" koleksiyonu → sadece 06:00-12:00 arası, sadece anasayfada, sadece Kafe sektörüne gösterilir.
Kullanıcı sayfayı açık bıraksa bile her saat başı içerik otomatik güncellenir, müzik kesilmez.
Her Koleksiyonun 3 Sorusu
Admin bir koleksiyon oluştururken şu 3 şeyi ayarlar. Tasarım (4. soru) otomatik belirlenir.
show_ondisplay_rulesvisibility_rules + corporate_account_idSektöre göre: Kafe sektörüne özel.
Genre'a göre: Rock genre sayfasına özel.
Corporate'a özel: Sadece o firmanın çalışanları.
┌─────┬─────┬─────┬─────┬─────┐ │ Pop │ Rock│ Jazz│ R&B │ Hip │ ├─────┼─────┼─────┼─────┼─────┤ │Metal│Türkü│ Caz │Dance│Latin│ └─────┴─────┴─────┴─────┴─────┘
Başlık Tümünü Gör › ┌────┐ ┌────┐ ┌────┐ ┌────┐ → │ img│ │ img│ │ img│ │ img│ └────┘ └────┘ └────┘ └────┘ Ad Ad Ad Ad
visibility_rules Detayı DEĞİŞTİ
Eski sector_rules → yeni visibility_rules. Tek bir JSON kolon, tüm filtreleri kapsar:
Sektör sayfasında → bu sektör sayfalarında görünür.
Örn: Rock + Jazz sayfalarında "Akustik Seçmeler" koleksiyonu.
Örn: Jazz FM sayfasında "Jazz Klasikleri" koleksiyonu.
• show_on: ["homepage"] ise → anasayfada sadece Kafe sektörü kullanıcıları görür
• show_on: ["sector"] ise → sadece Kafe sektör sayfasında görünür
• show_on: ["genre"] ise → sadece Rock ve Jazz genre sayfalarında görünür
• show_on: ["homepage", "genre"] ise → hem anasayfada (Kafe'ye) hem de Rock/Jazz'da görünür
sector_rules — sadece sektör filtresi yapabiliyordu. Genre veya radyo sayfası için yeni kolon gerekecekti.visibility_rules — sektör, genre, radyo hepsini tek JSON'da tutar. Yeni sayfa tipi eklenince sadece JSON'a yeni key eklenir.Kullanılacak Kartlar
Yeni kart tasarımı yapılmayacak. Mevcut kart component'leri aynen kullanılacak:
| Component | Ne İçin | Tıklanınca | Tasarım |
|---|---|---|---|
| x-muzibu.playlist-card | Çalma listesi | Şarkı listesi açılır | Yatay kaydırma |
| x-muzibu.album-card | Albüm | Albüm detayı açılır | Yatay kaydırma |
| x-muzibu.radio-card | Radyo | Hemen çalar (sayfa değişmez) | Yatay kaydırma |
| x-muzibu.genre-quick-card | Tür | Genre sayfası açılır | Grid |
| x-muzibu.sector-card | Sektör | Sektör sayfası açılır | Yatay kaydırma |
Kart Sayısı ve "Tümünü Gör"
Şu anki anasayfayla aynı mantık. Sabit sayılar, koleksiyon başına ayarlanmaz:
Örnek: 10 kart gösterilen bir koleksiyonda 14 öğe var → "Tümünü Gör" görünür → tıklanınca grid sayfası açılır.
Örnek: 10 kart gösterilen bir koleksiyonda 8 öğe var → buton gizli, hepsi zaten görünüyor.
Tablo 1: muzibu_content_collections
Her satır bir koleksiyon. Admin panelden oluşturulur.
| Kolon | Tip | Ne İşe Yarar | Örnek |
|---|---|---|---|
| collection_id | BIGINT PK | Otomatik numara | 1, 2, 3 |
| title | JSON | Koleksiyon adı (çoklu dil) | {"tr": "Sabah Kafe Mix"} |
| slug | JSON | URL kısa ismi | {"tr": "sabah-kafe-mix"} |
| description | JSON NULL | Açıklama (opsiyonel) | {"tr": "Sabah için..."} |
| show_on | JSON | NEREDE: Hangi sayfa tiplerinde? | ["homepage", "sector", "radio", "genre"] |
| display_rules | JSON NULL | NE ZAMAN: Saat + gün kuralı | {"start_hour":6, "end_hour":12, "is_always":false} |
| visibility_rules DEĞİŞTİ | JSON NULL | KİME: Sektör, genre, radyo filtresi (hepsi tek yerde) | {"sector_ids":[1]} veya {"genre_ids":[5,8]} veya {"show_to_all":true} |
| corporate_account_id | FK NULL | KİME (firma): NULL = herkes, dolu = o firmaya özel | NULL veya 5 |
| icon | VARCHAR NULL | Başlık ikonu | fas fa-coffee |
| color | VARCHAR NULL | Renk kodu | #f59e0b |
| media_id | FK NULL | Kapak görseli | 42 |
| sort_order | INT | Sıralama (küçük = üstte) | 1, 2, 3 |
| is_active | BOOLEAN | Açık / Kapalı | 1 |
Tablo 2: muzibu_collection_items
Her satır, bir koleksiyona eklenmiş bir öğe. Radyo + Playlist + Albüm karışık eklenebilir.
| Kolon | Tip | Ne İşe Yarar | Örnek |
|---|---|---|---|
| id | BIGINT PK | Otomatik numara | 1, 2, 3 |
| collection_id | FK | Hangi koleksiyona ait | 1 |
| itemable_type | VARCHAR | Öğe türü (5 seçenek) | playlist, album, radio, genre, sector |
| itemable_id | BIGINT | Öğenin ID'si | 12 |
| sort_order | INT | Sıralama (sürükle-bırak) | 1, 2, 3 |
| is_active | BOOLEAN | Aktif mi? | 1 |
Otomatik Tasarım Tespiti
Admin tasarım seçmez. Sistem, koleksiyondaki öğe tiplerine bakarak kararı kendisi verir:
genre mi?activeItems->every(fn($i) => $i->itemable_type === 'genre')Ek: users Tablosuna Eklenen Kolon
| Kolon | Tip | Ne İşe Yarar | Örnek |
|---|---|---|---|
| sector_id | FK NULL | Kullanıcının sektörü. Kafe sahibi = Kafe koleksiyonlarını görür. | 1 |
Admin Panelde Ne Yapılacak?
Sektöre göre → sektör seç (Kafe, Spor Salonu...)
Genre'a göre → genre seç (Rock, Jazz...)
Radyoya göre → radyo seç (Jazz FM...)
Firmaya özel → corporate hesap seç (X Otel Zinciri)
Sitede Ne Olacak?
Referans: Şu Anki Anasayfa
Mevcut anasayfadaki değerler (koleksiyon sistemi bunları temel alacak):
| Bölüm | Kart Sayısı | Tasarım | Koleksiyon Karşılığı |
|---|---|---|---|
| Türler (Genres) | 15 | Grid | Genre-only koleksiyon → otomatik grid |
| Çalma Listeleri | 10 | Yatay kaydırma | Playlist-only koleksiyon → otomatik yatay |
| Albümler | 10 | Yatay kaydırma | Album-only koleksiyon → otomatik yatay |
| Radyolar | 10 | Yatay kaydırma | Radio-only koleksiyon → otomatik yatay |
| Sektörler | 10 | Yatay kaydırma | Sector-only koleksiyon → otomatik yatay |
Versiyon Geçmişi
sector_rules → visibility_rules olarak genişletildi. Artık sektör, genre ve radyo filtresi tek JSON kolonda. Genre ve radyo sayfaları için de hedef belirleme. Kolon sayısı aynı (12).Teknik detaylar, kod örnekleri ve tüm kararlar için:
Tam Dokümantasyon (v10)Not: v10 henüz v5 değişikliklerini içermiyor, güncellenecek.