From d72ce2434a2461d9fa1c9b9fdbc047603c646357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Wed, 5 Nov 2025 10:24:43 -0300 Subject: [PATCH] Enhance template placeholder functionality: Updated the TemplateService to support new placeholders for page content, title, and excerpt. Modified related components and views to utilize these placeholders, improving dynamic content rendering. Added special placeholder buttons in the placeholder picker for easier insertion. --- .../Schemas/SectionTemplateForm.php | 2 +- app/Http/Controllers/PageController.php | 12 ++-- app/Services/TemplateService.php | 43 ++++++++++++++- app/View/Components/PageRenderer.php | 9 ++- .../components/placeholder-picker.blade.php | 55 +++++++++++++++++++ resources/views/templates/generic.blade.php | 3 +- resources/views/templates/home.blade.php | 3 +- 7 files changed, 116 insertions(+), 11 deletions(-) diff --git a/app/Filament/Admin/Resources/SectionTemplates/Schemas/SectionTemplateForm.php b/app/Filament/Admin/Resources/SectionTemplates/Schemas/SectionTemplateForm.php index 1d98fce..5a6bc84 100644 --- a/app/Filament/Admin/Resources/SectionTemplates/Schemas/SectionTemplateForm.php +++ b/app/Filament/Admin/Resources/SectionTemplates/Schemas/SectionTemplateForm.php @@ -43,7 +43,7 @@ class SectionTemplateForm ->columnSpanFull() ->helperText(__('section-templates.field_html_content_help')) ->extraAttributes([ - 'style' => 'max-height: 400px;overflow-y: auto;', + 'style' => 'max-height: 400px;overflow-y: auto;max-width: 100%;', 'data-field-name' => 'html_content', ]), diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index de6fbf0..496857d 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -74,7 +74,8 @@ class PageController extends Controller $renderedHeader = TemplateService::replacePlaceholders( $page->headerTemplate->html_content, - $mergedHeaderData + $mergedHeaderData, + $page ); } @@ -88,7 +89,8 @@ class PageController extends Controller $renderedFooter = TemplateService::replacePlaceholders( $page->footerTemplate->html_content, - $mergedFooterData + $mergedFooterData, + $page ); } @@ -154,7 +156,8 @@ public function show($slug) $renderedHeader = TemplateService::replacePlaceholders( $page->headerTemplate->html_content, - $mergedHeaderData + $mergedHeaderData, + $page ); } @@ -168,7 +171,8 @@ public function show($slug) $renderedFooter = TemplateService::replacePlaceholders( $page->footerTemplate->html_content, - $mergedFooterData + $mergedFooterData, + $page ); } diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index ee82bec..a7d2246 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -274,9 +274,50 @@ class TemplateService * Supports both {text.title} and {{text.title}} formats * Also supports {menu} and {staticMenu} placeholders for menu rendering * Also supports {custom.component_name} for custom blade components + * Also supports {page.content}, {page.title}, {page.excerpt} for page data */ - public static function replacePlaceholders(string $html, array $data): string + public static function replacePlaceholders(string $html, array $data, ?\App\Models\Page $page = null): string { + // Handle special {page.content} placeholder - Sayfa içeriğini gösterir + if (str_contains($html, '{page.content}')) { + $pageContent = ''; + if ($page) { + // Translation desteği varsa çeviriyi kullan + if (method_exists($page, 'translate')) { + $pageContent = $page->translate('content') ?: $page->content; + } else { + $pageContent = $page->content; + } + } + $html = str_replace('{page.content}', $pageContent ?? '', $html); + } + + // Handle special {page.title} placeholder - Sayfa başlığını gösterir + if (str_contains($html, '{page.title}')) { + $pageTitle = ''; + if ($page) { + if (method_exists($page, 'translate')) { + $pageTitle = $page->translate('title') ?: $page->title; + } else { + $pageTitle = $page->title; + } + } + $html = str_replace('{page.title}', $pageTitle ?? '', $html); + } + + // Handle special {page.excerpt} placeholder - Sayfa özetini gösterir + if (str_contains($html, '{page.excerpt}')) { + $pageExcerpt = ''; + if ($page) { + if (method_exists($page, 'translate')) { + $pageExcerpt = $page->translate('excerpt') ?: $page->excerpt; + } else { + $pageExcerpt = $page->excerpt; + } + } + $html = str_replace('{page.excerpt}', $pageExcerpt ?? '', $html); + } + // Handle special {menu} placeholder first if (str_contains($html, '{menu}')) { $renderedMenu = \App\Services\MenuService::render(); diff --git a/app/View/Components/PageRenderer.php b/app/View/Components/PageRenderer.php index c94b561..9f97f75 100644 --- a/app/View/Components/PageRenderer.php +++ b/app/View/Components/PageRenderer.php @@ -44,7 +44,8 @@ class PageRenderer extends Component return TemplateService::replacePlaceholders( $this->page->headerTemplate->html_content, - $mergedData + $mergedData, + $this->page ); } @@ -67,7 +68,8 @@ class PageRenderer extends Component $output .= TemplateService::replacePlaceholders( $section['template']->html_content, - $mergedData + $mergedData, + $this->page ); } @@ -90,7 +92,8 @@ class PageRenderer extends Component return TemplateService::replacePlaceholders( $this->page->footerTemplate->html_content, - $mergedData + $mergedData, + $this->page ); } } diff --git a/resources/views/components/placeholder-picker.blade.php b/resources/views/components/placeholder-picker.blade.php index 3673209..708683e 100644 --- a/resources/views/components/placeholder-picker.blade.php +++ b/resources/views/components/placeholder-picker.blade.php @@ -105,6 +105,60 @@
+ +
+

+ {{ __('placeholder-picker.special_placeholders') }} +

+
+ + {page.content} + + + {page.title} + + + {page.excerpt} + + + {menu} + + + {staticMenu} + +
+
+