Proje: Okul Platform · Hub: Okul Platform — Conventions
Banner show/hide pattern: configs tablosu + admin panel
Rule
Yeni bir homepage/listing/detail banner’ı eklerken görünürlüğü configs tablosundan
oku. Dosya-bazlı config (config/xxx.php veya env()) KULLANMA — admin panel
panel/banner route’undan gelen toggle’ı dinleyemeyiz.
Neden
- Admin panel (
BannerController@update)configs.item_value=0|1+statussatırını günceller - Controller
cache()->forget($bannerType)+ordered_homepage_bannerscache’i temizler - Panel listeleme sayfası
Config::getAllBanners()iletype LIKE '%_banner_show_status'sorgulayıp tüm banner type’larını listeler — yeni eklenen otomatik çıkar - Config dosyasından okursak admin toggle’ı hiçbir işe yaramaz
5 adımlı banner ekleme şablonu
1. Seeder (DB satırı)
database/seeds/XxxBannerConfigSeeder.php:
Config::firstOrCreate(
['type' => 'homepage_xxx_banner_show_status', 'item_id' => 1],
['type' => 'homepage_xxx_banner_show_status', 'item_id' => 1,
'item_value' => '0', 'status' => '0', 'description' => '10'],
);
cache()->forget('ordered_homepage_banners');Çalıştır: php artisan db:seed --class=Database\\Seeders\\XxxBannerConfigSeeder
2. app/Models/Config.php — okuma method’u
public function getHomepageXxxBannerShowStatus()
{
return cache()->remember('homepage_xxx_banner_show_status', 24 * 60 * 7, function () {
$banner = $this->where('type', 'homepage_xxx_banner_show_status')->where('status', '1')->first();
return $banner ? $banner->item_value : 0;
});
}3. Config::getBannerDisplayName() — panel listesi label’ı
'homepage_xxx_banner_show_status' => 'Homepage - XXX Banner',4. Banner partial (Blade) — self-gating
resources/views/frontend/includes/xxx-banner.blade.php:
@php $show = app(\App\Models\Config::class)->getHomepageXxxBannerShowStatus(); @endphp
@if($show)
{{-- Banner HTML + gaSendEventNavigation onclick --}}
@endif5. resources/views/frontend/index.blade.php — include
Self-gating partial için tek satır:
@include('frontend.includes.xxx-banner')Cache invalidasyon: panel BannerController::clearBannerCache($type) +
ordered_homepage_banners otomatik temizler. Ekstra iş yok.
Hızlı test
# DB kontrol
php artisan tinker
\App\Models\Config::where('type','like','%xxx%_banner%')->get(['type','status','item_value']);
# Panel listesinde görünüyor mu?
\App\Models\Config::getAllBanners()->where('type','like','%xxx%');Gerçek örnek — 2026-04-15 Profiling banners
Profiling modülü için eklenenler:
homepage_profiling_test_banner_show_statushomepage_profiling_finder_banner_show_status
Dosyalar:
database/seeds/ProfilingBannerConfigSeeder.phpapp/Models/Config.php→getHomepageProfilingTestBannerShowStatus()+Finderversiyonuresources/views/frontend/includes/profiling-banners.blade.php(self-gating, iki banner tek partial)resources/views/frontend/index.blade.php→@include('frontend.includes.profiling-banners')
Caught case (2026-04-15)
İlk iterasyonda config/profiling.php + env('PROFILING_BANNER_TEST_ENABLED') yaklaşımını
denedim. User flagladı: “bizim configs tablomuz var oradan takip ediliyor, panel/banner
routeundaki kullanim gibi”. Dosya silindi, Config model pattern’ine geçildi.
Ders: Bir banner/feature-flag eklerken önce mevcut admin panel bulgusunu yap — UI’dan toggle edilebilir olması büyük olasılıkla zaten bir DB config pattern’i kullanır.
Related
- 2026-04-15-profiling-event-taxonomy — profiling event helper hierarchy
- Panel route:
routes/panel.php→panel.banner.index/panel.banner.update - Controller:
app/Http/Controllers/Panel/BannerController.php - Config model:
app/Models/Config.php—getAllBanners(),getOrderedHomepageBanners(),getBannerDisplayName()