feat(homepage): membuat halaman homepage,menambahkan setting helper,

This commit is contained in:
Yoga Pangestu 2024-11-30 12:39:43 +07:00
parent 33c706a422
commit 3bafe7ce63
14 changed files with 540 additions and 11 deletions

View File

@ -1,6 +1,7 @@
<?php
use App\Models\Barbershop;
use App\Models\Setting;
if (! function_exists('barbershop')) {
function barbershop()
@ -8,3 +9,10 @@ function barbershop()
return Barbershop::all();
}
}
if (! function_exists('setting')) {
function setting()
{
return Setting::with('attachment')->first();
}
}

View File

@ -15,7 +15,7 @@ public function index(): View
{
return view('pages.admin.master.service.index', [
'pageTitle' => 'Layanan',
'services' => Service::with(['user', 'biography'])
'services' => Service::with(['user', 'user.biography'])
->barbershop()
->latest()
->get(),

View File

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Client;
use App\Http\Controllers\Controller;
use App\Models\Service;
use App\Models\User;
use Illuminate\Contracts\View\View;
class HomepageController extends Controller
{
public function index(): View
{
return view('pages.client.homepage', [
'pageTitle' => 'Beranda',
'metaDesc' => 'Temukan barbershop dengan kualitas layanan unggulan, pengalaman profesional, dan suasana nyaman. Dapatkan penawaran menarik dan ulasan terpercaya untuk memilih layanan yang sesuai dengan kebutuhan Anda',
'services' => Service::latest()->take(3)->get(),
'barber' => User::with(['biography', 'attachment'])->get(),
'prices' => Service::latest()->get(),
]);
}
}

View File

@ -1,6 +1,6 @@
(function ($)
{ "use strict"
/* 1. Proloder */
$(window).on('load', function () {
$('#preloader-active').delay(450).fadeOut('slow');
@ -25,10 +25,10 @@
$('#back-top a').on("click", function () {
$('body,html').animate({
scrollTop: 0
}, 800);
}, 20);
return false;
});
/* 3. slick Nav */
// mobile_menu
@ -58,7 +58,7 @@
autoplaySpeed: 5000,
dots: false,
fade: true,
arrows: false,
arrows: false,
prevArrow: '<button type="button" class="slick-prev"><i class="ti-angle-left"></i></button>',
nextArrow: '<button type="button" class="slick-next"><i class="ti-angle-right"></i></button>',
responsive: [{
@ -238,7 +238,7 @@
/* 10. WOW active */
new WOW().init();
// 11. ---- Mailchimp js --------//
// 11. ---- Mailchimp js --------//
function mailChimp() {
$('#mc_embed_signup').find('form').ajaxChimp();
}

View File

@ -0,0 +1,22 @@
<!doctype html>
<html class="no-js" lang="zxx">
<head>
@include('partials._meta')
@include('partials.client._css')
@yield('styles')
</head>
<body>
@include('partials.client._loader')
@include('partials.client._header')
@yield('app')
@include('partials.client._footer')
<div id="back-top">
<a title="Go to Top" href="#"> <i class="fas fa-level-up-alt"></i></a>
</div>
@include('partials.client._js')
@yield('scripts')
</body>
</html>

View File

@ -0,0 +1,293 @@
@extends('layouts.client')
@section('styles')
<style>
html {
scroll-behavior: smooth;
}
table {
width: 100%;
border-collapse: collapse;
}
table td {
padding: 8px;
text-align: left;
}
table td:nth-child(2) {
text-align: right;
}
table td span {
font-weight: bold;
}
</style>
@endsection
@section('app')
<main>
<!--? slider Area Start-->
<div class="slider-area position-relative fix" id="home">
<div class="slider-active">
<!-- Single Slider -->
<div class="single-slider slider-height d-flex align-items-center">
<div class="container">
<div class="row">
<div class="col-xl-8 col-lg-9 col-md-11 col-sm-10">
<div class="hero__caption">
<span data-animation="fadeInUp" data-delay="0.2s">{{ setting()->name }}</span>
<h1 data-animation="fadeInUp" data-delay="0.5s">Gaya Terbaik untuk Tampil Rapi dan
Percaya Diri</h1>
</div>
</div>
</div>
</div>
</div>
<!-- Single Slider -->
<div class="single-slider slider-height d-flex align-items-center">
<div class="container">
<div class="row">
<div class="col-xl-8 col-lg-9 col-md-11 col-sm-10">
<div class="hero__caption">
<span data-animation="fadeInUp" data-delay="0.2s">{{ setting()->name }}</span>
<h1 data-animation="fadeInUp" data-delay="0.5s">Gaya Terbaik untuk Tampil Rapi dan
Percaya Diri</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="thumb-content-box">
<div class="thumb-content">
<h3>buat janji sekarang</h3>
<a href="https://wa.me/{{ setting()->contact_number }}?text={{ urlencode('Halo, saya ingin booking cukur. Apakah ada jadwal tersedia?') }}"
target="_blank">
<i class="fas fa-long-arrow-alt-right"></i>
</a>
</div>
</div>
</div>
<section class="about-area section-padding30 position-relative" id="about">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-11">
<!-- about-img -->
<div class="about-img ">
<img src="{{ asset('assets/client/img/gallery/about.png') }}" alt="">
</div>
</div>
<div class="col-lg-6 col-md-12">
<div class="about-caption">
<!-- Section Tittle -->
<div class="section-tittle section-tittle3 mb-35">
<span>Tentang Kami</span>
<h2>Pengalaman Baru dalam Seni Gaya Rambut</h2>
</div>
<p class="mb-30 pera-bottom">Kami hadir untuk memberikan layanan potong rambut terbaik dengan
pendekatan modern dan nyaman. Anda dapat memilih gaya yang sesuai dengan kepribadian Anda
dengan fleksibilitas yang kami tawarkan.</p>
<p class="pera-top mb-50">Kami berkomitmen untuk menghadirkan pengalaman potong rambut yang
memuaskan, mulai dari layanan profesional hingga hasil yang memukau.</p>
</div>
</div>
</div>
</div>
<!-- About Shape -->
<div class="about-shape">
<img src="{{ asset('assets/client/img/gallery/about-shape.png') }}" alt="">
</div>
</section>
<section class="service-area pb-170" id="service">
<div class="container">
<!-- Section Tittle -->
<div class="row d-flex justify-content-center">
<div class="col-xl-7 col-lg-8 col-md-11 col-sm-11">
<div class="section-tittle text-center mb-90">
<span>Layanan Profesional</span>
<h2>Layanan Terbaik yang Kami Tawarkan untuk Anda</h2>
</div>
</div>
</div>
<!-- Section caption -->
<div class="row">
@foreach ($services as $service)
<div class="col-xl-4 col-lg-4 col-md-6">
<div class="services-caption mb-30">
<div class="service-cap text-center">
<h1>{{ $service->name }}</h1>
<p class="text-justify">{{ $service->description }}</p>
</div>
</div>
</div>
@endforeach
</div>
</div>
</section>
<div class="team-area pb-180" id="barber">
<div class="container">
<!-- Section Tittle -->
<div class="row justify-content-center">
<div class="col-xl-8 col-lg-8 col-md-11 col-sm-11">
<div class="section-tittle text-center mb-100">
<span>Tim Profesional</span>
<h2>Ahli Potong Rambut Terbaik untuk Anda</h2>
</div>
</div>
</div>
<div class="row team-active dot-style">
@foreach ($barber as $item)
<div class="col-xl-4 col-lg-4 col-md-6 col-sm-">
<div class="single-team mb-80 text-center">
<div class="team-img">
<img src="{{ Storage::url("users/{$item->attachment->formatted_attachment}") }}"
alt="image">
</div>
<div class="team-caption">
<h3><a href="#">{{ $item->biography->full_name ?? '-deleted-' }}</a></h3>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
<div class="best-pricing section-padding2 position-relative" id="price">
<div class="container">
<div class="row justify-content-end">
<div class="col-xl-7 col-lg-7">
<div class="section-tittle mb-50">
<span>Harga Terbaik Kami</span>
<h2>Kami Menawarkan Harga Terbaik</h2>
</div>
<!-- Pricing -->
<div class="row">
@if (count($prices) > 7)
<!-- Kolom pertama untuk 1-7 data pertama -->
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="pricing-list">
<table>
@foreach ($prices->take(7) as $price)
<tr>
<td>{{ $price->name }}</td>
<td><span>{{ formatToRupiah($price->price) }}</span></td>
</tr>
@endforeach
</table>
</div>
</div>
<!-- Kolom kedua untuk data sisanya -->
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="pricing-list">
<table>
@foreach ($prices->slice(7) as $price)
<tr>
<td>{{ $price->name }}</td>
<td><span>{{ formatToRupiah($price->price) }}</span></td>
</tr>
@endforeach
</table>
</div>
</div>
@else
<!-- Tampilkan dalam satu kolom jika data kurang dari atau sama dengan 7 -->
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="pricing-list">
<table>
@foreach ($prices as $price)
<tr>
<td>{{ $price->name }}</td>
<td><span>{{ formatToRupiah($price->price) }}</span></td>
</tr>
@endforeach
</table>
</div>
</div>
@endif
</div>
</div>
</div>
</div>
<div class="pricing-img">
<img class="pricing-img1" src="{{ asset('assets/client/img/gallery/pricing1.png') }}" alt="">
<img class="pricing-img2" src="{{ asset('assets/client/img/gallery/pricing2.png') }}" alt="">
</div>
</div>
<div class="gallery-area section-padding30" id="gallery">
<div class="container">
<!-- Section Tittle -->
<div class="row justify-content-center">
<div class="col-xl-6 col-lg-7 col-md-9 col-sm-10">
<div class="section-tittle text-center mb-100">
<span>Galeri</span>
<h2>Beberapa Gambar Mengenai Kami</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-6 col-sm-6">
<div class="box snake mb-30">
<div class="gallery-img "
style="background-image: url(assets/client/img/gallery/gallery1.png);">
</div>
<div class="overlay"></div>
</div>
</div>
<div class="col-lg-8 col-md-6 col-sm-6">
<div class="box snake mb-30">
<div class="gallery-img "
style="background-image: url(assets/client/img/gallery/gallery2.png);">
</div>
<div class="overlay"></div>
</div>
</div>
<div class="col-lg-8 col-md-6 col-sm-6">
<div class="box snake mb-30">
<div class="gallery-img "
style="background-image: url(assets/client/img/gallery/gallery3.png);">
</div>
<div class="overlay"></div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-sm-6">
<div class="box snake mb-30">
<div class="gallery-img "
style="background-image: url(assets/client/img/gallery/gallery4.png);">
</div>
<div class="overlay"></div>
</div>
</div>
</div>
</div>
</div>
</main>
@endsection
@section('scripts')
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script>
$(document).ready(function() {
function updateNavigation() {
var scrollPosition = $(window).scrollTop();
$('section, .slider-area, .team-area, .best-pricing, .gallery-area').each(function() {
var top = $(this).offset().top - 100;
var bottom = top + $(this).outerHeight();
var id = $(this).attr('id');
if (scrollPosition >= top && scrollPosition < bottom) {
$('.navigation li').removeClass('active');
$('.navigation a[href="#' + id + '"]').parent('li').addClass('active');
}
});
}
$(window).on('scroll', updateNavigation);
updateNavigation();
});
</script>
@endsection

View File

@ -5,4 +5,5 @@
<meta name="description" content="{{ $metaDesc }}">
<meta name="keywords" content="barbershop, potong rambut, cukur rambut, booking barbershop, layanan grooming">
<meta name="author" content="Barbershop">
<link rel="icon" href="{{ asset('assets/images/logo/logo-icon.png') }}" type="image/x-icon">
<title>{{ $pageTitle }} - Barbershop</title>

View File

@ -58,11 +58,9 @@
</div>
</li>
<li>
<div>
<a href="{{ route('homepage') }}">
<i data-feather="monitor"></i>
</a>
</div>
<a href="{{ route('homepage') }}">
<i data-feather="monitor"></i>
</a>
</li>
<li class="profile-nav onhover-dropdown pe-0 py-0">
<div class="media profile-media">

View File

@ -0,0 +1,13 @@
<link rel="stylesheet" href="{{ asset('assets/client/css/bootstrap.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/owl.carousel.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/slicknav.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/flaticon.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/gijgo.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/animate.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/animated-headline.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/magnific-popup.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/fontawesome-all.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/themify-icons.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/slick.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/nice-select.css') }}">
<link rel="stylesheet" href="{{ asset('assets/client/css/style.css') }}">

View File

@ -0,0 +1,76 @@
<footer>
<!--? Footer Start-->
<div class="footer-area section-bg" data-background="{{ asset('assets/client/img/gallery/footer_bg.png') }}">
<div class="container">
<div class="footer-top footer-padding">
<div class="row d-flex justify-content-between">
<div class="col-xl-5 col-lg-6 col-md-7 col-sm-9 ">
<div class="single-footer-caption mb-50">
<!-- logo -->
<div class="footer-logo">
<img src="{{ asset('assets/client/img/logo/logo2_footer.png') }}" alt="image">
</div>
<div class="footer-tittle">
<div class="footer-pera">
<p class="info1">
{{ setting()->description }}
</p>
</div>
</div>
</div>
</div>
<div class="col-xl-2 col-lg-2 col-md-3 col-sm-5">
<div class="single-footer-caption mb-50">
<div class="footer-tittle">
<h4>Tautan</h4>
<ul class="navigation">
<li><a href="#home">Beranda</a></li>
<li><a href="#about">Tentang</a></li>
<li><a href="#service">Layanan</a></li>
<li><a href="#barber">Barber</a></li>
<li><a href="#price">Harga</a></li>
<li><a href="#gallery">Galeri</a></li>
</ul>
</div>
</div>
</div>
<div class="col-xl-4 col-lg-4 col-md-6 col-sm-8">
<div class="single-footer-caption mb-50">
<div class="footer-tittle">
<h4>Lokasi</h4>
<iframe
src="https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d261.6766405576633!2d107.58368495425874!3d-6.415024019223096!3m2!1i1024!2i768!4f13.1!5e1!3m2!1sid!2sid!4v1732877139402!5m2!1sid!2sid"
width="400" height="200" style="border:0;" allowfullscreen="" loading="lazy"
referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
</div>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="row d-flex justify-content-between align-items-center">
<div class="col-xl-9 col-lg-8">
<div class="footer-copy-right">
<p>
&copy; 2024 {{ setting()->name }}. Semua hak dilindungi undang-undang.
</p>
</div>
</div>
<div class="col-xl-3 col-lg-4">
<!-- Footer Social -->
<div class="footer-social f-right">
<a
href="https://wa.me/{{ setting()->contact_number }}?text={{ urlencode('Halo, saya ingin booking cukur. Apakah ada jadwal tersedia?') }}"><i
class="fab fa-whatsapp"></i></a>
<a
href="mailto:{{ setting()->email }}?subject={{ urlencode('Booking Cukur') }}&body={{ urlencode('Halo, saya ingin booking cukur. Apakah ada jadwal tersedia?') }}">
<i class="fas fa-envelope"></i>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Footer End-->
</footer>

View File

@ -0,0 +1,45 @@
<header>
<!--? Header Start -->
<div class="header-area header-transparent">
<div class="main-header header-sticky">
<div class="container-fluid">
<div class="row align-items-center">
<!-- Logo -->
<div class="col-xl-2 col-lg-2 col-md-1">
<div class="logo"><img src="{{ asset('assets/client/img/logo/logo.png') }}" alt="image">
</div>
</div>
<div class="col-xl-10 col-lg-10 col-md-10">
<div class="menu-main d-flex align-items-center justify-content-end">
<!-- Main-menu -->
<div class="main-menu f-right d-none d-lg-block">
<nav>
<ul class="navigation" id="navigation">
<li><a href="#home">Beranda</a></li>
<li><a href="#about">Tentang</a></li>
<li><a href="#service">Layanan</a></li>
<li><a href="#barber">Barber</a></li>
<li><a href="#price">Harga</a></li>
<li><a href="#gallery">Galeri</a></li>
<li>
@if (auth()->check())
<a href="{{ route('dashboard.overview') }}">Dasbor</a>
@else
<a href="{{ route('login') }}">Masuk</a>
</li>
@endif
</ul>
</nav>
</div>
</div>
</div>
<!-- Mobile Menu -->
<div class="col-12">
<div class="mobile_menu d-block d-lg-none"></div>
</div>
</div>
</div>
</div>
</div>
<!-- Header End -->
</header>

View File

@ -0,0 +1,38 @@
<script src="{{ asset('assets/client/js/vendor/modernizr-3.5.0.min.js') }}"></script>
<!-- Jquery, Popper, Bootstrap -->
<script src="{{ asset('assets/client/js/vendor/jquery-1.12.4.min.js') }}"></script>
<script src="{{ asset('assets/client/js/popper.min.js') }}"></script>
<script src="{{ asset('assets/client/js/bootstrap.min.js') }}"></script>
<!-- Jquery Mobile Menu -->
<script src="{{ asset('assets/client/js/jquery.slicknav.min.js') }}"></script>
<!-- Jquery Slick , Owl-Carousel Plugins -->
<script src="{{ asset('assets/client/js/owl.carousel.min.js') }}"></script>
<script src="{{ asset('assets/client/js/slick.min.js') }}"></script>
<!-- One Page, Animated-HeadLin -->
<script src="{{ asset('assets/client/js/wow.min.js') }}"></script>
<script src="{{ asset('assets/client/js/animated.headline.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.magnific-popup.js') }}"></script>
<!-- Date Picker -->
<script src="{{ asset('assets/client/js/gijgo.min.js') }}"></script>
<!-- Nice-select, sticky -->
<script src="{{ asset('assets/client/js/jquery.nice-select.min.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.sticky.js') }}"></script>
<!-- counter , waypoint,Hover Direction -->
<script src="{{ asset('assets/client/js/jquery.counterup.min.js') }}"></script>
<script src="{{ asset('assets/client/js/waypoints.min.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.countdown.min.js') }}"></script>
<script src="{{ asset('assets/client/js/hover-direction-snake.min.js') }}"></script>
<!-- contact js -->
<script src="{{ asset('assets/client/js/contact.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.form.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.validate.min.js') }}"></script>
<script src="{{ asset('assets/client/js/mail-script.js') }}"></script>
<script src="{{ asset('assets/client/js/jquery.ajaxchimp.min.js') }}"></script>
<!-- Jquery Plugins, main Jquery -->
<script src="{{ asset('assets/client/js/plugins.js') }}"></script>
<script src="{{ asset('assets/client/js/main.js') }}"></script>

View File

@ -0,0 +1,10 @@
<div id="preloader-active">
<div class="preloader d-flex align-items-center justify-content-center">
<div class="preloader-inner position-relative">
<div class="preloader-circle"></div>
<div class="preloader-img pere-text">
<img src="{{ asset('assets/client/img/logo/loder.png') }}" alt="">
</div>
</div>
</div>
</div>

View File

@ -15,6 +15,7 @@
use App\Http\Controllers\Admin\Master\UserController;
use App\Http\Controllers\Admin\Setting\AccountController;
use App\Http\Controllers\Admin\Setting\ApplicationController;
use App\Http\Controllers\Client\HomepageController;
use Illuminate\Support\Facades\Route;
Route::prefix('auth')->group(function () {
@ -161,3 +162,5 @@
});
});
});
Route::get('/', [HomepageController::class, 'index'])->name('homepage');