From 5b1426062217710d885a873d5b227426cdb77640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 3 Nov 2025 16:16:06 -0300 Subject: [PATCH] Add data transformation for default_data fields in template forms: Implemented mutateFormDataBeforeSave method in Create and Edit pages for Footer, Header, and Section templates to properly format nested default_data fields into an array structure before saving. This enhancement improves data handling and ensures consistency across template forms. --- .../Pages/CreateFooterTemplate.php | 24 ++++++++++ .../Pages/EditFooterTemplate.php | 24 ++++++++++ .../Pages/CreateHeaderTemplate.php | 24 ++++++++++ .../Pages/EditHeaderTemplate.php | 24 ++++++++++ .../Pages/CreateSectionTemplate.php | 24 ++++++++++ .../Pages/EditSectionTemplate.php | 24 ++++++++++ app/Services/TemplateService.php | 8 +++- .../views/components/static-menu.blade.php | 45 +++++++++++++++++++ 8 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 resources/views/components/static-menu.blade.php diff --git a/app/Filament/Admin/Resources/FooterTemplates/Pages/CreateFooterTemplate.php b/app/Filament/Admin/Resources/FooterTemplates/Pages/CreateFooterTemplate.php index fb36ebe..6d0d8f4 100644 --- a/app/Filament/Admin/Resources/FooterTemplates/Pages/CreateFooterTemplate.php +++ b/app/Filament/Admin/Resources/FooterTemplates/Pages/CreateFooterTemplate.php @@ -14,4 +14,28 @@ class CreateFooterTemplate extends CreateRecord { return Width::Full; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Filament/Admin/Resources/FooterTemplates/Pages/EditFooterTemplate.php b/app/Filament/Admin/Resources/FooterTemplates/Pages/EditFooterTemplate.php index 8c74063..9194f15 100644 --- a/app/Filament/Admin/Resources/FooterTemplates/Pages/EditFooterTemplate.php +++ b/app/Filament/Admin/Resources/FooterTemplates/Pages/EditFooterTemplate.php @@ -28,4 +28,28 @@ class EditFooterTemplate extends EditRecord RestoreAction::make(), ]; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Filament/Admin/Resources/HeaderTemplates/Pages/CreateHeaderTemplate.php b/app/Filament/Admin/Resources/HeaderTemplates/Pages/CreateHeaderTemplate.php index fe33f7f..77a7ad4 100644 --- a/app/Filament/Admin/Resources/HeaderTemplates/Pages/CreateHeaderTemplate.php +++ b/app/Filament/Admin/Resources/HeaderTemplates/Pages/CreateHeaderTemplate.php @@ -14,4 +14,28 @@ class CreateHeaderTemplate extends CreateRecord { return Width::Full; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Filament/Admin/Resources/HeaderTemplates/Pages/EditHeaderTemplate.php b/app/Filament/Admin/Resources/HeaderTemplates/Pages/EditHeaderTemplate.php index 87ac01a..a345243 100644 --- a/app/Filament/Admin/Resources/HeaderTemplates/Pages/EditHeaderTemplate.php +++ b/app/Filament/Admin/Resources/HeaderTemplates/Pages/EditHeaderTemplate.php @@ -28,4 +28,28 @@ class EditHeaderTemplate extends EditRecord RestoreAction::make(), ]; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Filament/Admin/Resources/SectionTemplates/Pages/CreateSectionTemplate.php b/app/Filament/Admin/Resources/SectionTemplates/Pages/CreateSectionTemplate.php index 0005214..baf1d64 100644 --- a/app/Filament/Admin/Resources/SectionTemplates/Pages/CreateSectionTemplate.php +++ b/app/Filament/Admin/Resources/SectionTemplates/Pages/CreateSectionTemplate.php @@ -14,4 +14,28 @@ class CreateSectionTemplate extends CreateRecord { return Width::Full; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Filament/Admin/Resources/SectionTemplates/Pages/EditSectionTemplate.php b/app/Filament/Admin/Resources/SectionTemplates/Pages/EditSectionTemplate.php index cf53b94..5cd61e4 100644 --- a/app/Filament/Admin/Resources/SectionTemplates/Pages/EditSectionTemplate.php +++ b/app/Filament/Admin/Resources/SectionTemplates/Pages/EditSectionTemplate.php @@ -28,4 +28,28 @@ class EditSectionTemplate extends EditRecord RestoreAction::make(), ]; } + + protected function mutateFormDataBeforeSave(array $data): array + { + // Transform nested default_data fields (e.g., default_data.color.bg) + // into proper array format + $defaultData = []; + + foreach ($data as $key => $value) { + if (str_starts_with($key, 'default_data.')) { + // Remove 'default_data.' prefix to get the nested key + $nestedKey = substr($key, 13); // 'default_data.' length is 13 + $defaultData[$nestedKey] = $value; + // Remove the flattened key from data + unset($data[$key]); + } + } + + // Set the properly formatted default_data array + if (!empty($defaultData)) { + $data['default_data'] = $defaultData; + } + + return $data; + } } diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index 375cbc1..67a4790 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -267,7 +267,7 @@ class TemplateService /** * Replace placeholders in HTML with actual data * Supports both {text.title} and {{text.title}} formats - * Also supports {menu} placeholder for menu rendering + * Also supports {menu} and {staticMenu} placeholders for menu rendering */ public static function replacePlaceholders(string $html, array $data): string { @@ -276,6 +276,12 @@ class TemplateService $renderedMenu = \App\Services\MenuService::render(); $html = str_replace('{menu}', $renderedMenu, $html); } + + // Handle special {staticMenu} placeholder + if (str_contains($html, '{staticMenu}')) { + $renderedStaticMenu = view('components.static-menu')->render(); + $html = str_replace('{staticMenu}', $renderedStaticMenu, $html); + } // First, parse all placeholders in the format {type.field_name} preg_match_all('/\{([a-z]+\.[a-z_]+)\}/i', $html, $matches); diff --git a/resources/views/components/static-menu.blade.php b/resources/views/components/static-menu.blade.php new file mode 100644 index 0000000..b7423ce --- /dev/null +++ b/resources/views/components/static-menu.blade.php @@ -0,0 +1,45 @@ + function ($query) { + $query->where('status', 'published') + ->where('show_in_menu', true) + ->orderBy('sort_order', 'asc') + ->orderBy('title', 'asc'); + }]) + ->whereNull('parent_id') + ->where('status', 'published') + ->where('show_in_menu', true) + ->orderBy('sort_order', 'asc') + ->orderBy('title', 'asc') + ->get(); + ?> + +@if($menuItems->isNotEmpty()) + +@endif +