Files
citrus/resources/views/layouts/site.blade.php
T

293 lines
9.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
$favicon_path = setting('site_favicon');
?>
<!doctype html>
<html lang="{{ app()->getLocale() }}" dir="{{ function_exists('current_language') && current_language() ? current_language()->direction : 'ltr' }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@php
$seo_title = ($meta['title'] ?? null) ? $meta['title'] . ' - ' . setting('site_name') : setting('seo_meta_title');
$seo_description = $meta['description'] ?? setting('seo_meta_description');
$seo_image = $meta['image'] ?? setting('default_meta_image');
if ($seo_image && !str_starts_with($seo_image, 'http')) {
$seo_image = asset($seo_image);
}
@endphp
@php
$seo_canonical = $meta['canonical'] ?? url()->current();
$seo_robots = $meta['robots'] ?? 'index, follow';
$seo_og_type = $meta['og_type'] ?? 'website';
$seo_og_locale = str_replace('_', '-', $meta['locale'] ?? app()->getLocale());
@endphp
<title>{{ $seo_title }}</title>
<meta name="description" content="{{ $seo_description }}">
<meta name="robots" content="{{ $seo_robots }}">
<link rel="canonical" href="{{ $seo_canonical }}">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="{{ $seo_og_type }}">
<meta property="og:url" content="{{ $seo_canonical }}">
<meta property="og:title" content="{{ $seo_title }}">
<meta property="og:description" content="{{ $seo_description }}">
<meta property="og:locale" content="{{ $seo_og_locale }}">
@if(setting('site_name'))
<meta property="og:site_name" content="{{ setting('site_name') }}">
@endif
@if($seo_image)
<meta property="og:image" content="{{ $seo_image }}">
<meta property="og:image:alt" content="{{ $meta['image_alt'] ?? $seo_title }}">
@endif
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="{{ $seo_canonical }}">
<meta name="twitter:title" content="{{ $seo_title }}">
<meta name="twitter:description" content="{{ $seo_description }}">
@if($seo_image)
<meta name="twitter:image" content="{{ $seo_image }}">
<meta name="twitter:image:alt" content="{{ $meta['image_alt'] ?? $seo_title }}">
@endif
@if(!empty($structuredData))
<x-seo.json-ld :data="$structuredData" />
@endif
@stack('structured-data')
<link rel="icon" href="{{ $favicon_path ? (str_starts_with($favicon_path, 'http') ? $favicon_path : asset($favicon_path)) : asset('assets/img/favicon.png') }}">
@stack('head')
<link rel="stylesheet" href="{{ asset('html/style.css') }}">
<link rel="preload" href="{{ asset('assets/fonts/unicons/unicons.css') }}" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="{{ asset('assets/fonts/unicons/unicons.css') }}"></noscript>
<link rel="preload" href="{{ asset('assets/css/plugins.css') }}" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="{{ asset('assets/css/plugins.css') }}"></noscript>
<link rel="stylesheet" href="{{ asset('assets/css/colors/grape.css') }}">
<link rel="preload" href="{{ asset('assets/css/fonts/urbanist.css') }}" as="style" onload="this.rel='stylesheet'">
<link rel="preload" href="{{ asset('assets/css/fonts/space.css') }}" as="style" onload="this.rel='stylesheet'">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=translate">
<!-- Site Verification -->
@if(setting('seo_google_search_console'))
<meta name="google-site-verification" content="{{ setting('seo_google_search_console') }}" />
@endif
@if(setting('seo_bing_webmaster'))
<meta name="msvalidate.01" content="{{ setting('seo_bing_webmaster') }}" />
@endif
<style>
html {
overflow-x: clip;
max-width: 100%;
}
body {
overflow-x: clip;
max-width: 100%;
}
video,
iframe {
max-width: 100%;
}
header .header-language-desktop {
display: none !important;
}
@media (min-width: 992px) {
header .header-language-desktop {
display: flex !important;
}
}
@media (max-width: 991.98px) {
header nav .container > .navbar-other:has(> .navbar-nav > .language-select) {
display: none !important;
}
.offcanvas .language-select-offcanvas__toggle {
width: 100%;
text-align: left;
}
.offcanvas .language-select-offcanvas__panel {
position: static !important;
inset: auto !important;
transform: none !important;
background: transparent !important;
box-shadow: none !important;
border: 0 !important;
}
.offcanvas .language-select-offcanvas__panel .nav-link {
padding-left: 0 !important;
}
.offcanvas .language-select-offcanvas__toggle[aria-expanded="true"] .language-select-offcanvas__icon {
transform: rotate(180deg);
}
}
.language-select .language-select__trigger {
display: inline-flex !important;
flex-direction: row !important;
flex-wrap: nowrap !important;
align-items: center !important;
gap: 0.15rem;
}
.language-select .language-select__trigger.dropdown-toggle:after,
.language-select .language-select__trigger.dropdown-toggle::after {
position: static !important;
top: auto !important;
right: auto !important;
display: inline-block !important;
vertical-align: middle !important;
margin-left: 0 !important;
margin-right: 0 !important;
line-height: 1;
}
.navbar-dark .language-select .language-select__trigger.dropdown-toggle:after,
.navbar-dark .language-select .language-select__trigger.dropdown-toggle::after {
color: #ffffff !important;
}
.navbar-light .language-select .language-select__trigger.dropdown-toggle:after,
.navbar-light .language-select .language-select__trigger.dropdown-toggle::after {
color: #e31e24 !important;
}
<?php echo setting('custom_css') ?>
</style>
<!-- Google Analytics 4 (GA4) -->
@if(setting('seo_google_analytics_id'))
<script async src="https://www.googletagmanager.com/gtag/js?id={{ setting('seo_google_analytics_id') }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ setting('seo_google_analytics_id') }}');
// Global Event Tracker Helper
window.trackEvent = function(eventName, params = {}) {
if (typeof gtag === 'function') {
gtag('event', eventName, params);
}
};
</script>
@endif
@stack('styles')
</head>
<body class="overflow-x-hidden">
{{-- Dynamic Header Template or Static Navbar --}}
@php
$finalHeader = null;
// 1. String Başlık Kontrolü: Eğer string geldiyse (örn: "Demo29 Header"), modelini bul
if (isset($headerTemplate) && is_string($headerTemplate)) {
$foundTemplate = \App\Models\HeaderTemplate::where('title', $headerTemplate)
->where('is_active', true)
->first();
if ($foundTemplate) {
$headerTemplate = $foundTemplate;
}
}
// 2. Model Instance Varsa Render Et (En Yüksek Öncelik)
// Kullanıcı template seçtiyse bu çalışır ve renderedHeader'ı ezer.
if (isset($headerTemplate) && $headerTemplate instanceof \App\Models\HeaderTemplate) {
$templateDefaults = $headerTemplate->default_data ?? [];
$templateData = $header_data ?? [];
$mergedData = array_merge($templateDefaults, $templateData);
$model = $page ?? null;
$finalHeader = \App\Services\TemplateService::replacePlaceholders(
$headerTemplate->html_content,
$mergedData,
$model
);
}
// 3. Blade dosyası path'i varsa include et (RenderedHeader'dan ÖNCE kontrol edilmeli)
if (!$finalHeader && isset($header) && $header) {
$finalHeader = view($header)->render();
}
// 4. Eğer yukarıdan sonuç çıkmadıysa ve Controller zaten render ettiyse onu kullan
if (!$finalHeader && isset($renderedHeader) && $renderedHeader) {
$finalHeader = $renderedHeader;
}
@endphp
@if($finalHeader)
{!! $finalHeader !!}
@else
@include('partials.header')
@endif
{{-- Main Content --}}
<main id="main-content">
@yield('content')
</main>
{{-- Dynamic Footer Template or Static Footer --}}
@php
$finalFooter = null;
// 1. String Başlık Kontrolü
if (isset($footerTemplate) && is_string($footerTemplate)) {
$foundTemplate = \App\Models\FooterTemplate::where('title', $footerTemplate)
->where('is_active', true)
->first();
if ($foundTemplate) {
$footerTemplate = $foundTemplate;
}
}
// 2. Model Instance Varsa Render Et (En Yüksek Öncelik)
if (isset($footerTemplate) && $footerTemplate instanceof \App\Models\FooterTemplate) {
$templateDefaults = $footerTemplate->default_data ?? [];
$templateData = $footer_data ?? [];
$mergedData = array_merge($templateDefaults, $templateData);
$model = $page ?? null;
$finalFooter = \App\Services\TemplateService::replacePlaceholders(
$footerTemplate->html_content,
$mergedData,
$model
);
}
// 3. Blade dosyası path'i (RenderedFooter'dan ÖNCE)
if (!$finalFooter && isset($footer) && $footer) {
$finalFooter = view($footer)->render();
}
// 4. Controller'dan gelen renderedFooter
if (!$finalFooter && isset($renderedFooter) && !empty(trim($renderedFooter ?? ''))) {
$finalFooter = $renderedFooter;
}
@endphp
@if($finalFooter)
{!! $finalFooter !!}
@else
@include('partials.footer')
@endif
<script src="{{ asset('assets/js/plugins.js') }}" defer></script>
<script src="{{ asset('assets/js/theme.js') }}" defer></script>
@stack('scripts')
</body>
</html>