app.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <!DOCTYPE html>
  2. <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta name="apple-mobile-web-app-title" content="{{ config('meta_application_name') }}"/>
  6. @if($metaViewport = config('meta_viewport'))
  7. <meta name="viewport" content="{{ $metaViewport }}"/>
  8. @else
  9. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  10. @endif
  11. @if($metaRobots = config('meta_robots'))
  12. <meta name="robots" content="{{ $metaRobots }}"/>
  13. @endif
  14. @if($metaAuthor = config('meta_author'))
  15. <meta name="author" content="{{ $metaAuthor }}"/>
  16. @endif
  17. @if($metaKeywords = config('meta_keywords'))
  18. <meta name="keywords" content="{{ $metaKeywords }}"/>
  19. @endif
  20. @if($metaDescription = config('meta_description'))
  21. <meta name="description" content="{{ $metaDescription }}"/>
  22. @endif
  23. {!! config('meta_adds_info') !!}
  24. <!-- CSRF Token -->
  25. <meta name="csrf-token" content="{{ csrf_token() }}"/>
  26. <title>{{ config('site_title', config('app.name')) }}</title>
  27. @vite(['resources/sass/app.scss', 'resources/js/app.js'])
  28. <link rel="stylesheet" href="{{ asset('css/mobile/layout.css') }}"/>
  29. @stack('styles')
  30. <script>
  31. // 자바스크립트에서 사용하는 전역변수 선언
  32. var UID = {{ UID }};
  33. var BASE_URL = "{{ BASE_URL }}";
  34. var FULL_URL = "{{ FULL_URL }}";
  35. var ADMIN_URL = "{{ ADMIN_URL }}";
  36. var CHARSET = "{{ CHARSET }}";
  37. var DATE = "{{ DATE }}";
  38. var DATETIME = "{{ DATETIME }}";
  39. var IP_ADDRESS = "{{ IP_ADDRESS }}";
  40. var REFERER = "{{ REFERER }}";
  41. var USER_AGENT = "{{ USER_AGENT }}";
  42. var DEVICE = "{{ DEVICE }}";
  43. var PLATFORM = "{{ PLATFORM }}";
  44. var BROWSER = "{{ BROWSER }}";
  45. var IS_USER = {{ IS_USER }};
  46. var IS_ADMIN = {{ IS_ADMIN }};
  47. var IS_FRONT = 1;
  48. var CSRF = "{{ csrf_token() }}";
  49. </script>
  50. <script src="{{ asset('/js/common/common.js') }}" defer></script>
  51. <script src="{{ asset('/js/common/jquery.validate.extension.js') }}" defer></script>
  52. <script src="{{ asset('/js/front.js') }}" defer></script>
  53. </head>
  54. <body id="app">
  55. {{-- 상단 --}}
  56. <header id="header">
  57. <nav class="navbar">
  58. <div class="container-fluid">
  59. <button type="button" class="navbar-toggler" data-bs-toggle="offcanvas" data-bs-target="#navbarMenu" aria-controls="navbarMenu">
  60. <span class="navbar-toggler-icon"></span>
  61. </button>
  62. <a href="/" class="navbar-brand" target="_self">
  63. {{ config('app.name') }}
  64. </a>
  65. <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarSearch" aria-controls="navbarSearch" aria-expanded="false" aria-label="Toggle search">
  66. <i class="fa-solid fa-magnifying-glass"></i>
  67. </button>
  68. <div id="navbarSearch" class="collapse navbar-collapse">
  69. <form name="f_search" id="fSearch" role="search" method="get" action="{{ route('movie.search.index') }}" autocomplete="on" accept-charset="UTF-8">
  70. <input type="search" name="keyword" value="{{ old('keyword') }}" size="10" class="form-control me-2" placeholder="영화 제목" aria-label="Search"/>
  71. <button type="submit" class="btn btn-outline-success">검색</button>
  72. </form>
  73. </div>
  74. </div>
  75. </nav>
  76. {{-- 왼쪽 메뉴 --}}
  77. <div id="navbarMenu" class="offcanvas offcanvas-start" tabindex="-1" aria-labelledby="navbarMenuLabel">
  78. <div class="offcanvas-header">
  79. <h5 id="navbarMenuLabel" class="offcanvas-title">{{ config('app.name') }}</h5>
  80. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
  81. </div>
  82. <div class="offcanvas-header gap-2">
  83. @guest
  84. @if (Route::has('login'))
  85. <a href="{{ route('login') }}" class="btn btn-dark btn-sm w-100">{{ __('Login') }}</a>
  86. @endif
  87. @if (Route::has('register'))
  88. <a href="{{ route('register') }}" class="btn btn-dark btn-sm w-100">{{ __('Register') }}</a>
  89. @endif
  90. @else
  91. <div class="dropdown">
  92. <a href="#" id="account" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-bs-offset="-5,1">
  93. {{ $user->nickname ?: $user->name }}님 <span class="caret"></span>
  94. </a>
  95. <div class="dropdown-menu dropdown-menu-right">
  96. @admin
  97. <a href="{{ route('admin.index') }}" class="dropdown-item" target="_blank">관리자</a>
  98. @endadmin
  99. <a href="{{ route('account.profile') }}" class="dropdown-item">내 정보</a>
  100. <div class="dropdown-divider"></div>
  101. <a href="{{ route('logout') }}" class="dropdown-item">{{ __('Logout') }}</a>
  102. <form id="logoutForm" class="hide" action="{{ route('logout') }}" method="POST">@csrf</form>
  103. </div>
  104. </div>
  105. @endguest
  106. </div>
  107. <div class="offcanvas-body">
  108. <nav id="nav">
  109. <div class="nav flex-column mb-auto">
  110. @if($topMenu)
  111. @php
  112. $buildSubMenu = function ($categories) use (&$buildSubMenu, $subMenu) {
  113. $html = '<ul>';
  114. foreach ($categories as $cate) {
  115. $meta = $subMenu[$cate->id];
  116. $hasClass = "";
  117. if($meta->hasChildren) {
  118. $hasClass = 'class="has-children"';
  119. }
  120. $html .= sprintf('<li %s><a href="%s" class="dropdown-item" target="%s" %s>%s</a>', $hasClass, $meta->url, $meta->target, $meta->custom, $meta->name);
  121. $html .= $buildSubMenu($cate->children);
  122. $html .= '</li>';
  123. }
  124. $html .= '</ul>';
  125. return $html;
  126. };
  127. @endphp
  128. @foreach($topMenu[0] as $row)
  129. <a href="{{ $row->url }}" target="{{ $row->target }}" {{ $row->custom }} class="nav-link @if(!$row->isLeaf) dropdown-toggle @endif"
  130. @if(!$row->isLeaf) data-bs-toggle="dropdown" role="button" aria-expanded="false" data-bs-offset="10,-5" @endif>
  131. {{ $row->name }}
  132. </a>
  133. @if($row->hasChildren)
  134. <ul class="dropdown-menu">
  135. @foreach($row->children as $mn)
  136. @php $meta = $subMenu[$mn->id]; @endphp
  137. <li @if($meta->hasChildren) class="has-children" @endif>
  138. <a href="{{ $meta->url }}" class="dropdown-item" target="{{ $meta->target }}" {{ $meta->custom }}>{{ $meta->name }}</a>
  139. @if($meta->hasChildren)
  140. @php echo $buildSubMenu($mn->children) @endphp
  141. @endif
  142. </li>
  143. @endforeach
  144. </ul>
  145. @endif
  146. @endforeach
  147. @endif
  148. </div>
  149. </nav>
  150. </div>
  151. <div class="offcanvas-footer">
  152. <!-- 쿠팡 광고 -->
  153. <div class="ad-coupang">
  154. <iframe src="https://coupa.ng/cdvhzK" width="100%" height="75" frameborder="0" scrolling="no" referrerpolicy="unsafe-url"></iframe>
  155. <iframe src="https://ads-partners.coupang.com/widgets.html?id=637907&template=carousel&trackingCode=AF0305179&subId=&width=100&height=140" width="100%" height="140" frameborder="0" scrolling="no" referrerpolicy="unsafe-url"></iframe>
  156. <small>
  157. 쿠팡 파트너스의 활동은 공정거래위원회의 심사지침에 따라 추천, 보증인인 파트너스 회원과 당사의 경제적 이해관계에 대하여 공개하여야 합니다.
  158. </small>
  159. </div>
  160. <hr/>
  161. <address>&copy; Copyright 2022 {{ config('company_name') }}</address>
  162. </div>
  163. </div>
  164. </header>
  165. <main id="main">
  166. @yield('content')
  167. </main>
  168. {{-- 하단 --}}
  169. <footer id="footer">
  170. <small>
  171. 영화 내용에 대한 저작권 및 법적 책임은 영화진흥위원회, TMDB에 있습니다.
  172. </small>
  173. <address>
  174. &copy; Copyright 2022 {{ config('company_name') }}
  175. </address>
  176. </footer>
  177. {{-- 팝업 --}}
  178. @isset($popups)
  179. <div id="layerPops">
  180. @foreach($popups as $pop)
  181. <div id="layerPop_{{ $loop->index }}" class="layer-pops ui-draggable ui-draggable-handle" tabindex="-1" data-key="{{ $loop->iteration }}" data-disable-hours="{{ $pop->disable_hours }}" style=" @if($pop->top) top: {{ $pop->top }}px; @endif @if($pop->left) left: {{ $pop->left }}px; @endif @if($pop->width) width: {{ $pop->width }}px; @endif @if($pop->height) height: {{ $pop->height }}px; @endif">
  182. <article>
  183. {{ $pop->content }}
  184. </article>
  185. <article>
  186. <button type="button" class="btn-closed">오늘 하루 안보기</button>
  187. <button type="button" class="btn-cancel">닫기</button>
  188. </article>
  189. </div>
  190. @endforeach
  191. </div>
  192. @endif
  193. {{-- 처리중 1 --}}
  194. <div id="loading">
  195. <figure class="figure">
  196. <img src="/images/default/loading.gif" class="figure-img img-fluid"/>
  197. <figcaption class="figure-caption">처리 중...</figcaption>
  198. </figure>
  199. </div>
  200. @stack('scripts')
  201. @if(Session::has('message'))
  202. <script>alert(("{!! addslashes(Session::get('message')) !!}"));</script>
  203. @endif
  204. @if ($errors->any())
  205. <script>alert(("{{ addslashes($errors->first()) }}"));</script>
  206. @endif
  207. </body>
  208. </html>