tsett
This commit is contained in:
47
resources/views/partials/index/carousel-discount.blade.php
Normal file
47
resources/views/partials/index/carousel-discount.blade.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<div id="{{ $carousel_id }}" class="carousel slide" data-bs-ride="carousel">
|
||||
<div class="carousel-inner p-3">
|
||||
@foreach ($items as $key => $productVariation)
|
||||
<div class="carousel-item {{ $key == 0 ? 'active' : '' }}">
|
||||
<div class="row w-100 h-100 mx-auto g-2 g-lg-5">
|
||||
<div class="carousel-discount-img col-12 col-lg-6">
|
||||
<a href="{{ route('product.show', $productVariation->product->slug) }}">
|
||||
@if (isset($productVariation->main_image_url))
|
||||
<img src="{{ asset($productVariation->main_image_url) }}" alt="{{ $productVariation->name }}">
|
||||
@else
|
||||
<div class="bg-light rounded d-flex align-items-center justify-content-center">
|
||||
<i class="bi bi-image text-secondary"></i>
|
||||
</div>
|
||||
@endif
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 d-flex flex-column gap-3">
|
||||
<div class="row align-items-start g-3 carousel-discount-header">
|
||||
<h1 class="col-10 fs-3">{{ $productVariation->name }}</h1>
|
||||
<div class="col-2">
|
||||
<div class="discount-badge">
|
||||
-{{ $productVariation->discount_percent }}%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="d-none d-lg-block">{{ Str::words($productVariation->product->description, 30, '...') }}</p>
|
||||
<div class="carousel-price">
|
||||
<div class="w-25 d-flex flex-column mx-auto">
|
||||
<span class="original-price fs-4">{{ number_format($productVariation->old_price, 0, ',', ' ') }} ₽</span>
|
||||
<span class="discounted-price fs-2">{{ number_format($productVariation->price, 0, ',', ' ') }} ₽</span>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-dark-green w-100 p-3 mt-auto">Подробнее... </button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Previous</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Next</span>
|
||||
</button>
|
||||
</div>
|
||||
58
resources/views/partials/index/product-carousel.blade.php
Normal file
58
resources/views/partials/index/product-carousel.blade.php
Normal file
@@ -0,0 +1,58 @@
|
||||
@php
|
||||
$title = $title ?? 'Товары';
|
||||
$carousel_id = $carousel_id ?? 'productCarousel';
|
||||
$interval = $interval ?? 5000;
|
||||
@endphp
|
||||
|
||||
@if($items->count())
|
||||
<div class="container">
|
||||
<h1 class="text-center mb-4 fw-medium fs-3">
|
||||
<a class="text-decoration-none tw-text-dark-blue hover:tw-text-opacity-90" href="#">
|
||||
{{ $title }}
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<div id="{{ $carousel_id }}" class="carousel carousel-dark slide" data-bs-ride="carousel">
|
||||
<div class="carousel-inner">
|
||||
@foreach($items as $key => $chunk)
|
||||
<div class="carousel-item {{ $key === 0 ? 'active' : '' }}" data-bs-interval="{{ $interval }}">
|
||||
<div class="row g-2 justify-content-center">
|
||||
@foreach($chunk as $product)
|
||||
@include('products.partials.product-card', compact('product'))
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<!-- Индикаторы -->
|
||||
@if($items->count() > 1)
|
||||
<div class="carousel-indicators">
|
||||
@foreach($items as $key => $chunk)
|
||||
<button type="button"
|
||||
data-bs-target="#{{ $carousel_id }}"
|
||||
data-bs-slide-to="{{ $key }}"
|
||||
class="{{ $key === 0 ? 'active' : '' }}"
|
||||
aria-current="{{ $key === 0 ? 'true' : 'false' }}"
|
||||
aria-label="Slide {{ $key + 1 }}">
|
||||
</button>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Кнопки навигации -->
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Previous</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#{{ $carousel_id }}" data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Next</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="container text-center">
|
||||
<p class="text-muted">Товары не найдены</p>
|
||||
</div>
|
||||
@endif
|
||||
58
resources/views/partials/menu/catalog-megamenu.blade.php
Normal file
58
resources/views/partials/menu/catalog-megamenu.blade.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<div class="megamenu">
|
||||
<div class="megamenu-grid">
|
||||
@foreach($menuCategories as $category)
|
||||
<div class="category-column">
|
||||
<h5 class="tw-text-orange border-bottom pb-2 d-flex gap-2">
|
||||
<img src="{{ $category->iconUrl }}" alt="{{ $category->name }}" class="object-fit-scale" height="20" width="20">
|
||||
<a href="{{ $category->url }}" class="text-decoration-none tw-text-orange">
|
||||
{{ $category->name }}
|
||||
</a>
|
||||
</h5>
|
||||
<ul>
|
||||
{{-- Подкатегории 1 уровня --}}
|
||||
@foreach($category->children as $child)
|
||||
@if($child->children->count() > 0)
|
||||
{{-- Категория с подкатегориями --}}
|
||||
<li class="fw-bold mt-2">
|
||||
<a href="{{ $child->url }}" class="tw-text-orange text-decoration-none">
|
||||
{{ $child->name }}
|
||||
</a>
|
||||
</li>
|
||||
@foreach($child->children as $subChild)
|
||||
<li>
|
||||
<a href="{{ $subChild->url }}" class="text-decoration-none">
|
||||
— {{ $subChild->name }}
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
@else
|
||||
{{-- Обычная категория --}}
|
||||
<li>
|
||||
<a href="{{ $child->url }}" class="text-decoration-none">
|
||||
{{ $child->name }}
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
{{-- Популярные бренды --}}
|
||||
@if(isset($menuBrands) && $menuBrands->count() > 0)
|
||||
<div class="row mt-4 pt-3 border-top">
|
||||
<div class="col-12">
|
||||
<p class="mb-2 fw-bold tw-text-light-gray">Популярные бренды:</p>
|
||||
<div class="d-flex flex-wrap gap-3">
|
||||
@foreach($menuBrands as $brand)
|
||||
<a href=""
|
||||
class="tw-text-light-gray text-decoration-none hover:text-orange">
|
||||
{{ $brand->name }}
|
||||
</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
125
resources/views/partials/menu/menu.blade.php
Normal file
125
resources/views/partials/menu/menu.blade.php
Normal file
@@ -0,0 +1,125 @@
|
||||
<header class="tw-bg-dark-green pt-3 pb-3">
|
||||
<div class="container">
|
||||
<nav class="navbar navbar-expand-xl navbar-dark">
|
||||
<div class="container-fluid px-0 align-items-center">
|
||||
<a class="navbar-brand d-flex align-items-center gap-2 me-4 flex-shrink-0" href="/">
|
||||
<img src="{{ asset('assets/images/logo/' . $menuContacts->logo) }}" alt="{{ $menuContacts->name }}" width="70" height="70">
|
||||
<h3 class="fs-2 tw-text-light-gray p-0 m-0 text-uppercase">{{ $menuContacts->name }}</h3>
|
||||
</a>
|
||||
|
||||
<button class="navbar-toggler ms-auto" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#navbarTogglerHeader" aria-controls="navbarTogglerHeader" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse w-100" id="navbarTogglerHeader">
|
||||
<div class="d-xl-flex w-100 align-items-center gap-3">
|
||||
<ul class="navbar-nav flex-wrap flex-grow-1 mb-2 mb-xl-0 header-main-menu">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ request()->routeIs('index') ? 'active' : '' }}" href="{{ route('index') }}">Главная</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item dropdown-megamenu">
|
||||
<a class="nav-link d-flex align-items-center justify-content-center {{ request()->routeIs('category.show') ? 'active' : '' }}"
|
||||
href=""
|
||||
id="catalogDropdown" role="button">
|
||||
Каталог
|
||||
<span class="dropdown-icon ms-1">
|
||||
<img src="{{ asset('assets/images/icons/dropdown-arrow-svgrepo-com.svg') }}" alt="dropdown">
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@include('partials.menu.catalog-megamenu')
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ request()->routeIs('about') ? 'active' : '' }}" href="{{ route('about') }}">О нас</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ request()->routeIs('contacts') ? 'active' : '' }}" href="{{ route('contacts') }}">Контакты</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="header-right d-flex align-items-center justify-content-between gap-2">
|
||||
<form class="header-search d-flex position-relative" role="search" action="{{ route('search') }}" method="GET" onsubmit="return validateSearch()">
|
||||
<input id="input_search" class="form-control" type="search"
|
||||
name="q" placeholder="Поиск" value="{{ request('q') }}" required>
|
||||
<button class="btn btn-orange p-0 action-btn" type="submit">
|
||||
<img src="{{ asset('assets/images/icons/search-svgrepo-com.svg') }}" alt="Найти" class="header-icon">
|
||||
</button>
|
||||
</form>
|
||||
|
||||
@guest
|
||||
<a href="{{ route('login') }}" class="btn btn-orange p-0 action-btn" title="Войти">
|
||||
<img src="{{ asset('assets/images/icons/enter-svgrepo-com.svg') }}" alt="Войти" class="header-icon">
|
||||
</a>
|
||||
@endguest
|
||||
|
||||
@auth
|
||||
@can('manage_cart')
|
||||
<a href="{{ route('cart.index') }}" class="btn btn-orange p-0 action-btn position-relative" title="Корзина">
|
||||
<img src="{{ asset('assets/images/icons/cart-svgrepo-com.svg') }}" alt="Корзина" class="header-icon">
|
||||
<span class="cart-count position-absolute translate-middle badge rounded-pill bg-danger" style="font-size: 10px;">
|
||||
{{ \App\Models\CartItem::getCount() }}
|
||||
</span>
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
<div class="d-none d-xl-block">
|
||||
<div class="dropdown auth-dropdown">
|
||||
<button class="btn btn-orange p-0 action-btn" type="button">
|
||||
<img src="{{ asset('assets/images/icons/menu-svgrepo-com.svg') }}" alt="Меню" class="header-icon">
|
||||
</button>
|
||||
|
||||
<div class="auth-dropdown-menu">
|
||||
@can('cabinet_access')
|
||||
<a href="" class="btn btn-orange p-0 action-btn" title="Личный кабинет">
|
||||
<img src="{{ asset('assets/images/icons/user-svgrepo-com.svg') }}" alt="Кабинет" class="header-icon">
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
@can('admin_access')
|
||||
<a href="{{ route('admin.dashboard') }}" class="btn btn-orange p-0 action-btn" title="Панель управления">
|
||||
<img src="{{ asset('assets/images/icons/settings-svgrepo-com.svg') }}" alt="Админка" class="header-icon">
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
<form method="POST" action="{{ route('logout') }}" onsubmit="return confirm('Вы действительно хотите выйти?');">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-orange p-0 action-btn" title="Выйти">
|
||||
<img src="{{ asset('assets/images/icons/logout-svgrepo-com.svg') }}" alt="Выйти" class="header-icon">
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-xl-none user-mobile-menu">
|
||||
@can('cabinet_access')
|
||||
<a href="" class="btn btn-orange p-0 action-btn" title="Личный кабинет">
|
||||
<img src="{{ asset('assets/images/icons/user-svgrepo-com.svg') }}" alt="Кабинет" class="header-icon">
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
@can('admin_access')
|
||||
<a href="{{ route('admin.dashboard') }}" class="btn btn-orange p-0 action-btn" title="Панель управления">
|
||||
<img src="{{ asset('assets/images/icons/settings-svgrepo-com.svg') }}" alt="Админка" class="header-icon">
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
<form method="POST" action="{{ route('logout') }}" onsubmit="return confirm('Вы действительно хотите выйти?');">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-orange p-0 action-btn" title="Выйти">
|
||||
<img src="{{ asset('assets/images/icons/logout-svgrepo-com.svg') }}" alt="Выйти" class="header-icon">
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
Reference in New Issue
Block a user