✏️ 编辑:app.blade.php
路径:
/home/boguraj1/resources/views/layouts/app.blade.php
大小:16.1 KB · 修改:2026-07-09 06:31:56 · 权限:0644 · 可写
← 返回目录
👁 查看
⬇ 下载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>@yield('title', $settings['site_name'] ?? 'TMITStore') - Online Shop Bangladesh</title> <meta name="description" content="@yield('meta_description', $settings['meta_description'] ?? 'Best online shop in Bangladesh')"> <meta name="keywords" content="{{ $settings['meta_keywords'] ?? '' }}"> {{-- Bootstrap 5 --}} <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> {{-- Bootstrap Icons --}} <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet"> {{-- Google Fonts --}} <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet"> {{-- Google Tag Manager --}} @if(!empty($settings['google_tag_manager_id'])) <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','{{ $settings["google_tag_manager_id"] }}');</script> @endif {{-- Google Analytics --}} @if(!empty($settings['google_analytics_id'])) <script async src="https://www.googletagmanager.com/gtag/js?id={{ $settings['google_analytics_id'] }}"></script> <script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','{{ $settings["google_analytics_id"] }}');</script> @endif {{-- Facebook Pixel --}} @if(!empty($settings['facebook_pixel_id'])) <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init','{{ $settings["facebook_pixel_id"] }}'); fbq('track','PageView'); @if(session('pixel_purchase')) fbq('track','Purchase',{!! session('pixel_purchase') !!}@if(session('pixel_event_id')),{eventID:'{{ session("pixel_event_id") }}'}@endif); @endif </script> <noscript><img height="1" width="1" src="https://www.facebook.com/tr?id={{ $settings['facebook_pixel_id'] }}&ev=PageView&noscript=1" style="display:none"/></noscript> @endif <style> :root { --primary: #e63946; --primary-dark: #c1121f; --secondary: #457b9d; --dark: #1d3557; --light: #f8f9fa; --text-muted: #6c757d; } * { box-sizing: border-box; } body { font-family: 'Inter', sans-serif; color: #222; background: #fff; } /* TOP HEADER */ .top-header { background: var(--dark); color: #fff; padding: 8px 0; font-size: 13px; } .top-header a { color: #ddd; text-decoration: none; } .top-header a:hover { color: #fff; } .social-icons a { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: rgba(255,255,255,0.15); color: #fff; margin-left: 6px; transition: background .2s; font-size: 14px; } .social-icons a:hover { background: var(--primary); } /* MAIN HEADER */ .main-header { background: #fff; box-shadow: 0 2px 10px rgba(0,0,0,.08); position: sticky; top: 0; z-index: 1000; } .main-header .navbar-brand img { height: 50px; } .navbar-nav .nav-link { font-weight: 500; color: var(--dark) !important; padding: 8px 16px !important; } .navbar-nav .nav-link:hover, .navbar-nav .nav-link.active { color: var(--primary) !important; } .cart-icon { position: relative; } .cart-badge { position: absolute; top: -6px; right: -8px; background: var(--primary); color: #fff; border-radius: 50%; font-size: 10px; width: 18px; height: 18px; display: flex; align-items: center; justify-content: center; font-weight: 600; } /* SLIDER */ .hero-slider .carousel-item img { width: 100%; height: 480px; object-fit: cover; } @media(max-width:768px) { .hero-slider .carousel-item img { height: 220px; } } /* PRODUCT CARDS */ .product-card { border: 1px solid #eee; border-radius: 10px; overflow: hidden; transition: transform .2s, box-shadow .2s; background: #fff; } .product-card:hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0,0,0,.12); } .product-card img { width: 100%; height: 200px; object-fit: cover; } .product-card .card-body { padding: 12px; } .product-card .product-title { font-size: 14px; font-weight: 600; color: var(--dark); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 8px; } .btn-buy { background: var(--primary); color: #fff; border: none; width: 100%; padding: 8px; border-radius: 6px; font-weight: 600; font-size: 14px; transition: background .2s; } .btn-buy:hover { background: var(--primary-dark); color: #fff; } /* SECTION TITLE */ .section-title { font-size: 24px; font-weight: 700; color: var(--dark); position: relative; padding-bottom: 12px; margin-bottom: 30px; } .section-title::after { content: ''; position: absolute; bottom: 0; left: 0; width: 50px; height: 3px; background: var(--primary); border-radius: 2px; } .section-title.text-center::after { left: 50%; transform: translateX(-50%); } /* FOOTER */ footer { background: #111; color: #ccc; } footer a { color: #aaa; text-decoration: none; transition: color .2s; } footer a:hover { color: var(--primary); } .footer-social a { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; background: rgba(255,255,255,0.1); color: #fff; margin: 4px; font-size: 16px; transition: background .2s; } .footer-social a:hover { background: var(--primary); } /* PAGINATION */ .pagination { gap: 4px; } .page-link { color: var(--dark); border-radius: 8px !important; border: 1px solid #e0e0e0; padding: 6px 14px; font-weight: 500; transition: all .2s; } .page-link:hover { background: var(--primary); border-color: var(--primary); color: #fff; } .page-item.active .page-link { background: var(--primary); border-color: var(--primary); color: #fff; box-shadow: 0 3px 10px rgba(230,57,70,.35); } .page-item.disabled .page-link { color: #bbb; background: #f8f9fa; border-color: #e0e0e0; } /* ALERTS */ .alert { border-radius: 8px; } /* BUTTONS */ .btn-primary-custom { background: var(--primary); color: #fff; border: none; border-radius: 8px; padding: 10px 28px; font-weight: 600; transition: background .2s; } .btn-primary-custom:hover { background: var(--primary-dark); color: #fff; } .btn-outline-custom { border: 2px solid var(--primary); color: var(--primary); background: transparent; border-radius: 8px; padding: 10px 28px; font-weight: 600; transition: all .2s; } .btn-outline-custom:hover { background: var(--primary); color: #fff; } @yield('extra-styles') </style> @yield('head') </head> <body> @if(!empty($settings['google_tag_manager_id'])) <noscript><iframe src="https://www.googletagmanager.com/ns.html?id={{ $settings['google_tag_manager_id'] }}" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> @endif {{-- TOP HEADER --}} <div class="top-header d-none d-md-block"> <div class="container"> <div class="d-flex justify-content-between align-items-center"> <div> <i class="bi bi-telephone-fill me-1"></i> <a href="tel:{{ $settings['site_phone'] ?? '+880 1700-000000' }}">{{ $settings['site_phone'] ?? '+880 1700-000000' }}</a> <span class="mx-3">|</span> <i class="bi bi-geo-alt-fill me-1"></i> <span>{{ $settings['site_address'] ?? 'Dhaka, Bangladesh' }}</span> </div> <div class="social-icons"> @if(!empty($settings['facebook_url'])) <a href="{{ $settings['facebook_url'] }}" target="_blank"><i class="bi bi-facebook"></i></a> @endif @if(!empty($settings['youtube_url'])) <a href="{{ $settings['youtube_url'] }}" target="_blank"><i class="bi bi-youtube"></i></a> @endif @if(!empty($settings['instagram_url'])) <a href="{{ $settings['instagram_url'] }}" target="_blank"><i class="bi bi-instagram"></i></a> @endif </div> </div> </div> </div> {{-- MAIN HEADER --}} <header class="main-header"> <div class="container"> <nav class="navbar navbar-expand-lg py-2"> <a class="navbar-brand" href="{{ route('home') }}"> @if(!empty($settings['site_logo'])) <img src="{{ asset('storage/' . $settings['site_logo']) }}" alt="{{ $settings['site_name'] ?? 'TMITStore' }}" style="height:50px;object-fit:contain;max-width:160px"> @else <span style="font-size:24px;font-weight:800;color:var(--primary)">TMIT<span style="color:var(--dark)">Store</span></span> @endif </a> <button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarMain"> <ul class="navbar-nav mx-auto"> @foreach(\App\Models\MenuItem::forLocation('header') as $menuItem) <li class="nav-item"> <a class="nav-link {{ $menuItem->isActive() ? 'active' : '' }}" href="{{ $menuItem->url }}" target="{{ $menuItem->target }}"> @if($menuItem->icon)<i class="bi {{ $menuItem->icon }} me-1"></i>@endif {{ $menuItem->label }} </a> </li> @endforeach </ul> <div class="d-flex align-items-center gap-3"> <form action="{{ route('shop') }}" method="GET" class="d-flex"> <div class="input-group input-group-sm" style="width:220px"> <input type="text" name="search" class="form-control" placeholder="Search products..." value="{{ request('search') }}"> <button class="btn btn-danger btn-sm" type="submit"><i class="bi bi-search"></i></button> </div> </form> <a href="{{ route('cart') }}" class="cart-icon text-dark text-decoration-none"> <i class="bi bi-cart3 fs-5"></i> @php $cartCount = \App\Models\Cart::where('session_id', session()->getId())->sum('quantity'); @endphp @if($cartCount > 0) <span class="cart-badge">{{ $cartCount }}</span> @endif </a> </div> </div> </nav> </div> </header> {{-- FLASH MESSAGES --}} @if(session('success')) <div class="container mt-3"><div class="alert alert-success alert-dismissible fade show"><i class="bi bi-check-circle me-2"></i>{{ session('success') }}<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div></div> @endif @if(session('error')) <div class="container mt-3"><div class="alert alert-danger alert-dismissible fade show"><i class="bi bi-exclamation-circle me-2"></i>{{ session('error') }}<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div></div> @endif {{-- MAIN CONTENT --}} <main> @yield('content') </main> {{-- FOOTER --}} <footer class="pt-5 pb-3 mt-5"> <div class="container"> <div class="row g-4 mb-4"> <div class="col-lg-4"> @if(!empty($settings['site_logo'])) <a href="{{ route('home') }}"> <img src="{{ asset('storage/' . $settings['site_logo']) }}" alt="{{ $settings['site_name'] ?? 'TMITStore' }}" style="height:50px;object-fit:contain;max-width:180px;filter:brightness(0) invert(1)"> </a> @else <h5 style="color:#fff;font-weight:700;font-size:20px">{{ $settings['site_name'] ?? 'TMITStore' }}</h5> @endif @if(!empty($settings['footer_text'])) <p class="mt-2" style="font-size:14px">{{ $settings['footer_text'] }}</p> @endif <div class="footer-social mt-3"> @if(!empty($settings['facebook_url']))<a href="{{ $settings['facebook_url'] }}" target="_blank"><i class="bi bi-facebook"></i></a>@endif @if(!empty($settings['youtube_url']))<a href="{{ $settings['youtube_url'] }}" target="_blank"><i class="bi bi-youtube"></i></a>@endif @if(!empty($settings['instagram_url']))<a href="{{ $settings['instagram_url'] }}" target="_blank"><i class="bi bi-instagram"></i></a>@endif </div> </div> <div class="col-lg-2 col-6"> <h6 style="color:#fff;font-weight:600">Quick Links</h6> <ul class="list-unstyled mt-2" style="font-size:14px"> @foreach(\App\Models\MenuItem::forLocation('footer_quick') as $menuItem) <li class="mb-1"> <a href="{{ $menuItem->url }}" target="{{ $menuItem->target }}">{{ $menuItem->label }}</a> </li> @endforeach </ul> </div> <div class="col-lg-3 col-6"> <h6 style="color:#fff;font-weight:600">Customer Service</h6> <ul class="list-unstyled mt-2" style="font-size:14px"> @foreach(\App\Models\MenuItem::forLocation('footer_customer') as $menuItem) <li class="mb-1"> <a href="{{ $menuItem->url }}" target="{{ $menuItem->target }}">{{ $menuItem->label }}</a> </li> @endforeach </ul> </div> <div class="col-lg-3"> <h6 style="color:#fff;font-weight:600">Contact Us</h6> <ul class="list-unstyled mt-2" style="font-size:14px"> <li class="mb-1"><i class="bi bi-telephone me-2" style="color:var(--primary)"></i>{{ $settings['site_phone'] ?? '+880 1700-000000' }}</li> <li class="mb-1"><i class="bi bi-envelope me-2" style="color:var(--primary)"></i>{{ $settings['site_email'] ?? 'info@tmitstore.com' }}</li> <li class="mb-1"><i class="bi bi-geo-alt me-2" style="color:var(--primary)"></i>{{ $settings['site_address'] ?? 'Dhaka, Bangladesh' }}</li> </ul> </div> </div> <hr style="border-color:#333"> <div class="d-flex flex-column flex-md-row justify-content-between align-items-center" style="font-size:13px"> <p class="mb-1">All rights reserved by <a href="#" style="color:var(--primary)">tmitstore.com</a></p> <p class="mb-1">Design and Developed by <strong style="color:var(--primary)">tmitstore</strong></p> </div> </div> </footer> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> @yield('scripts') </body> </html>
💾 保存
取消
保存为 UTF-8,换行统一为 LF