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.

This commit is contained in:
Ümit Tunç
2025-11-05 10:24:43 -03:00
parent b1cd5492c1
commit d72ce2434a
7 changed files with 116 additions and 11 deletions
@@ -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',
]),
+8 -4
View File
@@ -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
);
}
+42 -1
View File
@@ -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();
+6 -3
View File
@@ -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
);
}
}