Implement Dynamic Header and Footer Templates in Blog Controller: Enhanced the BlogController to prioritize page-specific header and footer templates based on the 'blog' page settings. If no specific templates are set, it falls back to the default active templates. Updated the blog index view to include a header template variable for better customization. Additionally, added redirects for legacy index URLs to improve user navigation.

This commit is contained in:
Ümit Tunç
2026-01-06 22:03:05 +03:00
parent 374d4a8d7d
commit c73d448f47
4 changed files with 49 additions and 11 deletions
+42 -10
View File
@@ -8,6 +8,7 @@ use App\Models\BlogComment;
use App\Models\HeaderTemplate;
use App\Models\FooterTemplate;
use App\Services\TemplateService;
use App\Models\Page;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
@@ -44,31 +45,62 @@ class BlogController extends Controller
? $query->latest('published_at')->paginate(12)
: collect();
// Render Header Template - En son aktif olan header template'i kullan
// Blog sayfa ayarlarını bul (varsa)
$blogPage = Page::where('slug', 'blog')->first();
// Render Header Template
$renderedHeader = null;
$headerTemplate = HeaderTemplate::where('is_active', true)
->latest('updated_at')
->first();
$headerTemplate = null;
// 1. Öncelik: Blog sayfasında seçili header template
if ($blogPage && $blogPage->header_template_id) {
$headerTemplate = HeaderTemplate::find($blogPage->header_template_id);
}
// 2. Öncelik: Varsayılan aktif template
if (!$headerTemplate) {
$headerTemplate = HeaderTemplate::where('is_active', true)
->latest('updated_at')
->first();
}
if ($headerTemplate) {
$templateDefaults = $headerTemplate->default_data ?? [];
$pageData = $blogPage ? ($blogPage->header_data ?? []) : [];
$mergedData = array_merge($templateDefaults, $pageData);
$renderedHeader = TemplateService::replacePlaceholders(
$headerTemplate->html_content,
$templateDefaults
$mergedData,
$blogPage
);
}
// Render Footer Template - En son aktif olan footer template'i kullan
// Render Footer Template
$renderedFooter = null;
$footerTemplate = FooterTemplate::where('is_active', true)
->latest('updated_at')
->first();
$footerTemplate = null;
// 1. Öncelik: Blog sayfasında seçili footer template
if ($blogPage && $blogPage->footer_template_id) {
$footerTemplate = FooterTemplate::find($blogPage->footer_template_id);
}
// 2. Öncelik: Varsayılan aktif template
if (!$footerTemplate) {
$footerTemplate = FooterTemplate::where('is_active', true)
->latest('updated_at')
->first();
}
if ($footerTemplate) {
$templateDefaults = $footerTemplate->default_data ?? [];
$pageData = $blogPage ? ($blogPage->footer_data ?? []) : [];
$mergedData = array_merge($templateDefaults, $pageData);
$renderedFooter = TemplateService::replacePlaceholders(
$footerTemplate->html_content,
$templateDefaults
$mergedData,
$blogPage
);
}