From 5aa2a3d6e50adb853c00490fd6aca70b8a34cdff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Thu, 1 Jan 2026 09:55:16 +0300 Subject: [PATCH] Enhance Settings and PageController Logic: Updated the SettingForm to include dynamic selection for header and footer templates based on active settings, improving modularity and user experience. Refactored PageController to retrieve active settings for rendering templates, ensuring fallback logic is streamlined and enhancing overall functionality. Updated navbar component to dynamically display social media links from settings, contributing to better localization and user engagement. --- .../Settings/Schemas/SettingForm.php | 21 +++++- app/Http/Controllers/PageController.php | 70 +++++++++++-------- .../views/components/custom/navbar.blade.php | 9 +-- .../components/front/menu-item.blade.php | 65 ++++++++--------- resources/views/partials/header.blade.php | 2 +- 5 files changed, 96 insertions(+), 71 deletions(-) diff --git a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php index ec811b9..017d37e 100644 --- a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php +++ b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php @@ -42,6 +42,7 @@ class SettingForm ->regex('/^[a-z0-9_-]+$/') ->maxLength(255) ->disabled(fn ($record) => $record !== null) + ->live(onBlur: true) ->columnSpanFull(), TextInput::make('label') @@ -114,10 +115,28 @@ class SettingForm ->label(__('settings.value')) ->helperText(__('settings.value_helper')) ->required() - ->visible(fn (Get $get) => in_array($get('type'), ['string', 'text', 'json'])) + ->visible(fn (Get $get) => in_array($get('type'), ['string', 'text', 'json']) && !in_array($get('key'), ['default_header', 'default_footer'])) ->rows(fn (Get $get) => $get('type') === 'text' ? 5 : 3) ->columnSpanFull(), + Select::make('value_header_template') + ->label('Default Header Template') + ->options(\App\Models\HeaderTemplate::where('is_active', true)->pluck('title', 'id')) + ->visible(fn (Get $get) => $get('key') === 'default_header') + ->statePath('value') + ->searchable() + ->preload() + ->columnSpanFull(), + + Select::make('value_footer_template') + ->label('Default Footer Template') + ->options(\App\Models\FooterTemplate::where('is_active', true)->pluck('title', 'id')) + ->visible(fn (Get $get) => $get('key') === 'default_footer') + ->statePath('value') + ->searchable() + ->preload() + ->columnSpanFull(), + Toggle::make('value_boolean') ->label(__('settings.value')) ->helperText(__('settings.value_helper')) diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 5a4acd7..9621edd 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -24,7 +24,7 @@ class PageController extends Controller ->latest('updated_at') ->first(); - $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null; + $settings = class_exists(Setting::class) ? (object) Setting::where('is_active', true)->pluck('value', 'key')->toArray() : null; $renderedHeader = null; $renderedFooter = null; @@ -43,11 +43,14 @@ class PageController extends Controller // Header Render $headerTemplate = $page->headerTemplate; - /* + if (!$headerTemplate) { - $headerTemplate = HeaderTemplate::where('is_active', true)->latest('updated_at')->first(); + $defaultHeaderId = $settings->default_header ?? null; + if ($defaultHeaderId) { + $headerTemplate = HeaderTemplate::find($defaultHeaderId); + } } - */ + if ($headerTemplate) { $templateDefaults = $headerTemplate->default_data ?? []; $pageData = $page->header_data ?? []; @@ -57,11 +60,13 @@ class PageController extends Controller // Footer Render $footerTemplate = $page->footerTemplate; - /* + if (!$footerTemplate) { - $footerTemplate = FooterTemplate::where('is_active', true)->latest('updated_at')->first(); + $defaultFooterId = $settings->default_footer ?? null; + if ($defaultFooterId) { + $footerTemplate = FooterTemplate::find($defaultFooterId); + } } - */ if ($footerTemplate) { $templateDefaults = $footerTemplate->default_data ?? []; @@ -96,7 +101,7 @@ class PageController extends Controller - $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null; + $settings = class_exists(Setting::class) ? (object) Setting::where('is_active', true)->pluck('value', 'key')->toArray() : null; // Hiç sayfa yoksa: direkt home template'inin statik fallback'i ile render et if (!$page) { @@ -142,9 +147,10 @@ class PageController extends Controller // Eğer sayfa için header seçilmemişse, en son aktif header template'i kullan if (!$headerTemplate) { - $headerTemplate = HeaderTemplate::where('is_active', true) - ->latest('updated_at') - ->first(); + $defaultHeaderId = $settings->default_header ?? null; + if ($defaultHeaderId) { + $headerTemplate = HeaderTemplate::find($defaultHeaderId); + } } if ($headerTemplate) { @@ -165,13 +171,12 @@ class PageController extends Controller $footerTemplate = $page->footerTemplate; // Eğer sayfa için footer seçilmemişse, en son aktif footer template'i kullan - /* if (!$footerTemplate) { - $footerTemplate = FooterTemplate::where('is_active', true) - ->latest('updated_at') - ->first(); + $defaultFooterId = $settings->default_footer ?? null; + if ($defaultFooterId) { + $footerTemplate = FooterTemplate::find($defaultFooterId); + } } - */ if ($footerTemplate) { // Merge template defaults with page data (page data overrides defaults) @@ -214,7 +219,7 @@ class PageController extends Controller ->where('status', 'published') ->first(); - $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null; + $settings = class_exists(Setting::class) ? (object) Setting::where('is_active', true)->pluck('value', 'key')->toArray() : null; // Meta verilerini hazırla $metaTitle = null; @@ -238,7 +243,10 @@ class PageController extends Controller // Render Header Template $headerTemplate = $page->headerTemplate; if (!$headerTemplate) { - $headerTemplate = HeaderTemplate::where('is_active', true)->latest('updated_at')->first(); + $defaultHeaderId = $settings->default_header ?? null; + if ($defaultHeaderId) { + $headerTemplate = HeaderTemplate::find($defaultHeaderId); + } } if ($headerTemplate) { @@ -250,11 +258,13 @@ class PageController extends Controller // Render Footer Template $footerTemplate = $page->footerTemplate; - /* + if (!$footerTemplate) { - $footerTemplate = FooterTemplate::where('is_active', true)->latest('updated_at')->first(); + $defaultFooterId = $settings->default_footer ?? null; + if ($defaultFooterId) { + $footerTemplate = FooterTemplate::find($defaultFooterId); + } } - */ if ($footerTemplate) { $templateDefaults = $footerTemplate->default_data ?? []; @@ -285,7 +295,7 @@ class PageController extends Controller ->where('status', 'published') ->firstOrFail(); - $settings = class_exists(Setting::class) ? (Setting::query()->first()) : null; + $settings = class_exists(Setting::class) ? (object) Setting::where('is_active', true)->pluck('value', 'key')->toArray() : null; $metaTitle = method_exists($page, 'translate') ? ($page->translate('meta_title') ?: $page->translate('title')) @@ -318,9 +328,10 @@ class PageController extends Controller // Eğer sayfa için header seçilmemişse, en son aktif header template'i kullan if (!$headerTemplate) { - $headerTemplate = HeaderTemplate::where('is_active', true) - ->latest('updated_at') - ->first(); + $defaultHeaderId = $settings->default_header ?? null; + if ($defaultHeaderId) { + $headerTemplate = HeaderTemplate::find($defaultHeaderId); + } } if ($headerTemplate) { @@ -341,13 +352,12 @@ class PageController extends Controller $footerTemplate = $page->footerTemplate; // Eğer sayfa için footer seçilmemişse, en son aktif footer template'i kullan - /* if (!$footerTemplate) { - $footerTemplate = FooterTemplate::where('is_active', true) - ->latest('updated_at') - ->first(); + $defaultFooterId = $settings->default_footer ?? null; + if ($defaultFooterId) { + $footerTemplate = FooterTemplate::find($defaultFooterId); + } } - */ if ($footerTemplate) { // Merge template defaults with page data (page data overrides defaults) diff --git a/resources/views/components/custom/navbar.blade.php b/resources/views/components/custom/navbar.blade.php index 1b352fd..9f6de5b 100644 --- a/resources/views/components/custom/navbar.blade.php +++ b/resources/views/components/custom/navbar.blade.php @@ -2,10 +2,11 @@