Files
citrus/resources/views/components/front/header.blade.php
T

369 lines
15 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
// Get menu items from Pages with nested children
$menuItems = \App\Models\Page::with(['children' => function ($query) {
$query->where('status', 'published')
->where('show_in_menu', true)
->orderBy('sort_order', 'asc')
->orderBy('title', 'asc');
}, 'children.children' => 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();
// Check if we're on homepage - multiple checks for reliability
$currentRoute = request()->route() ? request()->route()->getName() : null;
$currentPath = request()->path();
$isHomepage = $currentRoute === 'homepage' || $currentPath === '/' || request()->is('/');
@endphp
<header class="relative wrapper {{ $isHomepage ? '!bg-[#edf2fc]' : '!bg-white' }}">
<nav class="navbar navbar-expand-lg {{ $isHomepage ? 'center-logo transparent position-absolute navbar-dark' : 'navbar-light !bg-white !shadow-sm' }}">
<div class="container {{ $isHomepage ? 'justify-between' : 'flex justify-between' }} items-center">
<!-- Mobile Header -->
<div class="flex flex-row w-full justify-between items-center xl:!hidden lg:!hidden">
<div class="navbar-brand"><a href="/">
<img class="logo-dark" src="{{ asset('assets/img/truncgil-yatay.svg') }}" alt="image" loading="lazy">
<img class="logo-light" src="{{ asset('assets/img/truncgil-yatay-dark.svg') }}" alt="image" loading="lazy">
</a></div>
<div class="navbar-other !ml-auto">
<ul class="navbar-nav flex-row items-center">
<li class="nav-item xl:!hidden lg:!hidden">
<button class="hamburger offcanvas-nav-btn"><span></span></button>
</li>
</ul>
</div>
</div>
<!-- Desktop Header -->
@if($isHomepage)
<!-- Homepage Layout (Center Logo) -->
<div class="navbar-collapse-wrapper flex flex-row items-center w-full">
<div class="navbar-collapse offcanvas offcanvas-nav offcanvas-start">
<div class="offcanvas-header lg:mx-auto xl:mx-auto order-0 lg:!order-1 lg:!px-[5rem] xl:!order-1 xl:!px-[5rem] p-[1.5rem] !flex items-center justify-between flex-row">
<a class="transition-none hidden lg:!flex xl:!flex" href="/"><img class="logo-dark" src="{{ asset('assets/img/truncgil-yatay.svg') }}" alt="image" loading="lazy">
<img class="logo-light" src="{{ asset('assets/img/truncgil-yatay-dark.svg') }}" alt="image" loading="lazy"></a>
</div>
<div class="w-full order-1 lg:!order-none lg:!flex xl:!order-none xl:!flex offcanvas-body homepage-nav-panel homepage-nav-left">
<ul class="navbar-nav">
@foreach($menuItems->slice(0, ceil($menuItems->count() / 2)) as $item)
<x-front.menu-item :item="$item" />
@endforeach
</ul>
</div>
<div class="w-full order-3 lg:!order-2 lg:!flex xl:!order-2 xl:!flex offcanvas-body homepage-nav-panel homepage-nav-right">
<ul class="navbar-nav">
@foreach($menuItems->slice(ceil($menuItems->count() / 2)) as $item)
<x-front.menu-item :item="$item" />
@endforeach
</ul>
</div>
<div class="offcanvas-body xl:!hidden lg:!hidden order-4 !mt-auto">
<div class="offcanvas-footer">
<div>
<a href="mailto:{{setting('contact_email')}}" class="link-inverse">{{setting('contact_email')}}</a>
<br> <a href="tel:{{setting('contact_phone')}}">{{setting('contact_phone')}}</a> <br>
<nav class="nav social social-white !mt-4">
<?php $social_media = json_decode(setting('social_links'), true); ?>
<a class="!text-[#cacaca] text-[1rem] transition-all duration-[0.2s] ease-in-out translate-y-0 motion-reduce:transition-none hover:translate-y-[-0.15rem] m-[0_.7rem_0_0]" href="{{ !empty($social_media['Twitter']) ? $social_media['Twitter'] : '#' }}" target="_blank" rel="noopener"><i class="uil uil-twitter before:content-['\ed59'] !text-white text-[1rem]"></i></a>
<a class="!text-[#cacaca] text-[1rem] transition-all duration-[0.2s] ease-in-out translate-y-0 motion-reduce:transition-none hover:translate-y-[-0.15rem] m-[0_.7rem_0_0]" href="{{ !empty($social_media['Facebook']) ? $social_media['Facebook'] : '#' }}" target="_blank" rel="noopener"><i class="uil uil-facebook-f before:content-['\eae2'] !text-white text-[1rem]"></i></a>
<a class="!text-[#cacaca] text-[1rem] transition-all duration-[0.2s] ease-in-out translate-y-0 motion-reduce:transition-none hover:translate-y-[-0.15rem] m-[0_.7rem_0_0]" href="{{ !empty($social_media['Github']) ? $social_media['Github'] : '#' }}" target="_blank" rel="noopener"><i class="uil uil-github before:content-['\eb40'] !text-white text-[1rem]"></i></a>
<a class="!text-[#cacaca] text-[1rem] transition-all duration-[0.2s] ease-in-out translate-y-0 motion-reduce:transition-none hover:translate-y-[-0.15rem] m-[0_.7rem_0_0]" href="{{ !empty($social_media['Instagram']) ? $social_media['Instagram'] : '#' }}" target="_blank" rel="noopener"><i class="uil uil-instagram before:content-['\eb9c'] !text-white text-[1rem]"></i></a>
<a class="!text-[#cacaca] text-[1rem] transition-all duration-[0.2s] ease-in-out translate-y-0 motion-reduce:transition-none hover:translate-y-[-0.15rem] m-[0_.7rem_0_0]" href="{{ !empty($social_media['Youtube']) ? $social_media['Youtube'] : '#' }}" target="_blank" rel="noopener"><i class="uil uil-youtube before:content-['\edb5'] !text-white text-[1rem]"></i></a>
</nav>
</div>
</div>
</div>
</div>
</div>
@else
<!-- Other Pages Layout (Logo Left, Menu Center, Social Right) -->
<div class="navbar-collapse-wrapper flex flex-row items-center w-full justify-between hidden lg:!flex xl:!flex">
<!-- Logo on Left -->
<div class="navbar-brand">
<a href="/">
<img class="!h-[2.5rem]" src="{{ asset('assets/img/truncgil-yatay.svg') }}" alt="Truncgil Teknoloji" loading="lazy">
</a>
</div>
<!-- Menu in Center -->
<div class="navbar-collapse offcanvas offcanvas-nav offcanvas-start">
<div class="offcanvas-body flex justify-center">
<ul class="navbar-nav flex-row items-center gap-1">
@foreach($menuItems as $item)
<x-front.menu-item :item="$item" />
@endforeach
</ul>
</div>
</div>
<!-- Social Media & Language on Right -->
<div class="flex items-center gap-4">
<nav class="nav social flex items-center gap-2">
<?php $social_media = json_decode(setting('social_links'), true); ?>
@if(!empty($social_media['Twitter']))
<a class="!text-[#5daed5] hover:!text-[#3b9ec9] text-[1.1rem] transition-colors" href="{{ $social_media['Twitter'] }}" target="_blank" rel="noopener">
<i class="uil uil-twitter"></i>
</a>
@endif
@if(!empty($social_media['Facebook']))
<a class="!text-[#4470cf] hover:!text-[#3259b8] text-[1.1rem] transition-colors" href="{{ $social_media['Facebook'] }}" target="_blank" rel="noopener">
<i class="uil uil-facebook-f"></i>
</a>
@endif
@if(!empty($social_media['Github']))
<a class="!text-[#343a40] hover:!text-[#23272b] text-[1.1rem] transition-colors" href="{{ $social_media['Github'] }}" target="_blank" rel="noopener">
<i class="uil uil-github"></i>
</a>
@endif
@if(!empty($social_media['Instagram']))
<a class="!text-[#d53581] hover:!text-[#c12570] text-[1.1rem] transition-colors" href="{{ $social_media['Instagram'] }}" target="_blank" rel="noopener">
<i class="uil uil-instagram"></i>
</a>
@endif
@if(!empty($social_media['Youtube']))
<a class="!text-[#c8312b] hover:!text-[#b02822] text-[1.1rem] transition-colors" href="{{ $social_media['Youtube'] }}" target="_blank" rel="noopener">
<i class="uil uil-youtube"></i>
</a>
@endif
</nav>
<x-custom.language-selector />
</div>
</div>
@endif
</div>
</nav>
</header>
@push('styles')
<style>
/* Logo Visibility Fix */
.logo-dark, .logo-light { display: none !important; }
.navbar-light .logo-dark, .navbar-dark .logo-light { display: block !important; }
/* Sticky scroll: açık arka planda koyu logo */
.navbar.fixed.navbar-light .logo-dark,
.navbar.transparent.fixed .logo-dark,
.navbar-clone.navbar-light .logo-dark {
display: block !important;
}
.navbar.fixed.navbar-light .logo-light,
.navbar.transparent.fixed .logo-light,
.navbar-clone.navbar-light .logo-light {
display: none !important;
}
/* Tema center-logo.fixed kurallarını geçersiz kıl */
.navbar.center-logo.fixed .offcanvas-header .logo-dark,
.navbar-clone.center-logo .offcanvas-header .logo-dark {
display: block !important;
}
.navbar.center-logo.fixed .offcanvas-header .logo-light,
.navbar-clone.center-logo .offcanvas-header .logo-light {
display: none !important;
}
/* Mobil offcanvas menüde yalnızca light logo */
@media (max-width: 991.98px) {
.offcanvas .logo-dark { display: none !important; }
.offcanvas .logo-light { display: block !important; }
}
/* Anasayfa: sol/sağ nav eşit genişlik, logo tam ortada, uzun metinler ellipsis */
@media (min-width: 992px) {
.navbar.center-logo .offcanvas-nav {
display: grid !important;
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
align-items: center;
width: 100%;
flex-direction: row !important;
}
.navbar.center-logo .offcanvas-nav > .offcanvas-header {
grid-column: 2;
grid-row: 1;
position: static;
z-index: 5;
width: auto !important;
max-width: none;
margin: 0 !important;
padding: 0 !important;
transform: none;
justify-content: center !important;
justify-self: center;
}
.navbar.center-logo .offcanvas-nav > .homepage-nav-left {
grid-column: 1;
grid-row: 1;
width: 100% !important;
min-width: 0;
flex: none !important;
display: flex !important;
justify-content: flex-end;
align-items: center;
}
.navbar.center-logo .offcanvas-nav > .homepage-nav-right {
grid-column: 3;
grid-row: 1;
width: 100% !important;
min-width: 0;
flex: none !important;
display: flex !important;
justify-content: flex-start;
align-items: center;
}
.navbar.center-logo .homepage-nav-panel .navbar-nav {
display: flex;
flex-wrap: nowrap;
width: 100%;
min-width: 0;
margin: 0;
}
.navbar.center-logo .homepage-nav-left .navbar-nav {
justify-content: flex-end;
}
.navbar.center-logo .homepage-nav-right .navbar-nav {
justify-content: flex-start;
}
.navbar.center-logo .homepage-nav-panel .nav-item {
min-width: 0;
flex: 0 1 auto;
}
.navbar.center-logo .homepage-nav-panel .nav-link {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
}
}
.tooltip.homepage-nav-tooltip .tooltip-inner {
max-width: none;
white-space: nowrap;
background-color: rgba(33, 38, 44, 0.95);
font-size: 0.8125rem;
font-weight: 600;
padding: 0.35rem 0.65rem;
}
.tooltip.homepage-nav-tooltip.bs-tooltip-bottom .tooltip-arrow::before {
border-bottom-color: rgba(33, 38, 44, 0.95);
}
.tooltip.homepage-nav-tooltip.bs-tooltip-top .tooltip-arrow::before {
border-top-color: rgba(33, 38, 44, 0.95);
}
/* Smoother Offcanvas Menu Transition */
.offcanvas {
transition: transform 0.4s cubic-bezier(0.77, 0.2, 0.05, 1.0) !important;
}
.offcanvas-backdrop {
transition: opacity 0.4s ease !important;
}
/* Fluid Hamburger Animation */
.hamburger {
transition: all 0.3s ease-in-out;
}
.hamburger span,
.hamburger::before,
.hamburger::after {
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) !important;
}
.hamburger.is-active span {
background-color: transparent !important;
}
.hamburger.is-active::before {
transform: translateY(6px) rotate(45deg) !important;
}
.hamburger.is-active::after {
transform: translateY(-6px) rotate(-45deg) !important;
}
</style>
@endpush
@push('scripts')
<script>
function initHomepageNavEllipsisTooltips() {
if (window.matchMedia('(max-width: 991.98px)').matches) {
return;
}
document.querySelectorAll('.navbar.center-logo .homepage-nav-panel .nav-link').forEach(function(link) {
if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip) {
var existingTooltip = bootstrap.Tooltip.getInstance(link);
if (existingTooltip) {
existingTooltip.dispose();
}
}
link.removeAttribute('title');
if (link.scrollWidth <= link.clientWidth) {
return;
}
var fullText = link.textContent.trim();
if (!fullText) {
return;
}
if (typeof bootstrap !== 'undefined' && bootstrap.Tooltip) {
new bootstrap.Tooltip(link, {
title: fullText,
trigger: 'hover',
placement: 'bottom',
customClass: 'homepage-nav-tooltip',
container: 'body',
});
} else {
link.setAttribute('title', fullText);
}
});
}
document.addEventListener('DOMContentLoaded', function() {
var offcanvases = document.querySelectorAll('.offcanvas-nav');
var hamburgers = document.querySelectorAll('.hamburger.offcanvas-nav-btn');
if (offcanvases.length > 0 && hamburgers.length > 0) {
offcanvases.forEach(function(oc) {
oc.addEventListener('show.bs.offcanvas', function () {
hamburgers.forEach(function(h) { h.classList.add('is-active'); });
});
oc.addEventListener('hide.bs.offcanvas', function () {
hamburgers.forEach(function(h) { h.classList.remove('is-active'); });
});
});
}
initHomepageNavEllipsisTooltips();
if (document.fonts && document.fonts.ready) {
document.fonts.ready.then(initHomepageNavEllipsisTooltips);
}
var resizeTimer;
window.addEventListener('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(initHomepageNavEllipsisTooltips, 150);
});
});
</script>
@endpush