Compare commits

...

3 Commits

Author SHA1 Message Date
Bayu Lukman Yusuf 7baffc9cb5 add category, brands, gender navbar 2026-02-20 11:24:25 +07:00
Bayu Lukman Yusuf 87096be7cc contact us 2026-02-20 11:07:26 +07:00
Bayu Lukman Yusuf 7017d38f12 footer brands 2026-02-20 10:08:34 +07:00
13 changed files with 324 additions and 1671 deletions

View File

@ -0,0 +1,13 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ContactController extends Controller
{
public function index(Request $request)
{
return view('contact.v1');
}
}

View File

@ -27,7 +27,9 @@ class BrandRepository
return Brand::whereIn('name', $ids)->orderBy('priority', 'desc')
->where('priority', '>', 0)
->orderBy('name', 'asc')->get();
->orderBy('name', 'asc')
->get();
}
return Brand::orderBy('priority', 'desc')->orderBy('name', 'asc')

View File

@ -0,0 +1,29 @@
<?php
namespace App\View\Components;
use App\Repositories\Catalog\BrandRepository;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class FooterBrands extends Component
{
public $brands;
/**
* Create a new component instance.
*/
public function __construct(BrandRepository $brandRepository)
{
$this->brands = $brandRepository->getList([]);
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
return view('components.footer-brands', ['brands' => $this->brands]);
}
}

View File

@ -4,6 +4,8 @@ namespace App\View\Components\Layout;
use App\Repositories\Catalog\CategoryRepository;
use App\Repositories\Catalog\GenderRepository;
use App\Repositories\Catalog\BrandRepository;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
@ -13,6 +15,7 @@ class NavbarCategory extends Component
public $genders = [];
public $categories = [];
public $brands = [];
/**
* Create a new component instance.
*/
@ -22,13 +25,18 @@ class NavbarCategory extends Component
$genderRepository = new GenderRepository();
$categoryRepository = new CategoryRepository();
$brandsRepository = new BrandRepository();
$this->genders = $genderRepository->getList([]);
$this->genders = collect($this->genders)->chunk(7);
$this->categories = $categoryRepository->getList([]);
// chunk
$this->categories = collect($this->categories)->chunk(7);
$this->brands = $brandsRepository->getList([]);
$this->brands = collect($this->brands)->chunk(7);
}
/**

64
lang/en/contact.php Normal file
View File

@ -0,0 +1,64 @@
<?php
return [
'title' => 'Contact us',
'subtitle' => 'Feel free to contact us and we will be happy to help you!',
// Contact details section
'location_title' => 'Location',
'location_address' => 'Jalan Pintu Air Raya No.11 B,D,E,F,G RT.8/RW.1, Ps. Baru, Kecamatan Sawah Besar, Kota Jakarta Pusat, Daerah Khusus Ibukota Jakarta 10710',
'location_link' => 'Get directions',
'phone_title' => 'Phone',
'phone_number' => '(021) 3500703',
'phone_whatsapp' => '0818-4343-01',
'email_title' => 'Email',
'email_address' => 'sales@asiagolf.id',
// Contact form
'form_title' => 'Send us a message',
'form_subtitle' => 'We usually respond within 24 hours',
'name_label' => 'Name',
'name_placeholder' => 'Your name',
'email_label' => 'Email',
'email_placeholder' => 'your.email@example.com',
'subject_label' => 'Subject',
'subject_placeholder' => 'What is this about?',
'message_label' => 'Message',
'message_placeholder' => 'Tell us more about your inquiry...',
'submit_button' => 'Send message',
// Social media
'social_title' => 'Follow us',
'social_instagram' => 'Instagram',
'social_facebook' => 'Facebook',
'social_twitter' => 'Twitter',
// Success messages
'success_title' => 'Thank you for your message!',
'success_message' => 'We have received your message and will get back to you soon.',
// Error messages
'error_title' => 'Something went wrong',
'error_message' => 'Please try again later or contact us directly.',
// Working hours
'working_hours_title' => 'Working hours',
'working_hours_mon_fri' => 'Mon - Fri 8:00 - 18:00',
'working_hours_sat_sun' => 'Sat - Sun 10:00 - 16:00',
// Support section
'support_title' => 'Looking for support?',
'support_message' => 'We might already have what you\'re looking for. See our FAQs or head to our dedicated Help Center.',
'help_center_button' => 'Help center',
// FAQ
'faq_delivery_question' => 'How long will delivery take?',
'faq_delivery_answer' => 'Delivery times vary based on your location and chosen shipping method. Generally, our standard delivery takes up to 5 days, while our Express Delivery ensures your order reaches you within 1 day. Please note that these times may be subject to occasional variations due to unforeseen circumstances, but we do our best to meet these estimates.',
];

64
lang/id/contact.php Normal file
View File

@ -0,0 +1,64 @@
<?php
return [
'title' => 'Hubungi Kami',
'subtitle' => 'Jangan ragu untuk menghubungi kami dan kami akan dengan senang hati membantu Anda!',
// Contact details section
'location_title' => 'Lokasi',
'location_address' => 'Jalan Pintu Air Raya No.11 B,D,E,F,G RT.8/RW.1, Ps. Baru, Kecamatan Sawah Besar, Kota Jakarta Pusat, Daerah Khusus Ibukota Jakarta 10710',
'location_link' => 'Petunjuk arah',
'phone_title' => 'Telepon',
'phone_number' => '(021) 3500703',
'phone_whatsapp' => '0818-4343-01',
'email_title' => 'Email',
'email_address' => 'sales@asiagolf.id',
// Contact form
'form_title' => 'Kirim pesan',
'form_subtitle' => 'Kami biasanya merespons dalam 24 jam',
'name_label' => 'Nama',
'name_placeholder' => 'Nama Anda',
'email_label' => 'Email',
'email_placeholder' => 'email.anda@example.com',
'subject_label' => 'Subjek',
'subject_placeholder' => 'Tentang apa ini?',
'message_label' => 'Pesan',
'message_placeholder' => 'Ceritakan lebih lanjut tentang pertanyaan Anda...',
'submit_button' => 'Kirim pesan',
// Social media
'social_title' => 'Ikuti kami',
'social_instagram' => 'Instagram',
'social_facebook' => 'Facebook',
'social_twitter' => 'Twitter',
// Success messages
'success_title' => 'Terima kasih atas pesan Anda!',
'success_message' => 'Kami telah menerima pesan Anda dan akan segera menghubungi Anda kembali.',
// Error messages
'error_title' => 'Terjadi kesalahan',
'error_message' => 'Silakan coba lagi nanti atau hubungi kami langsung.',
// Working hours
'working_hours_title' => 'Jam operasional',
'working_hours_mon_fri' => 'Sen - Jum 08:00 - 18:00',
'working_hours_sat_sun' => 'Sab - Min 10:00 - 16:00',
// Support section
'support_title' => 'Mencari bantuan?',
'support_message' => 'Kami mungkin sudah memiliki apa yang Anda cari. Lihat FAQ kami atau kunjungi ke Pusat Bantuan kami.',
'help_center_button' => 'Pusat bantuan',
// FAQ
'faq_delivery_question' => 'Berapa lama pengiriman akan berlangsung?',
'faq_delivery_answer' => 'Waktu pengiriman bervariasi tergantung pada lokasi Anda dan metode pengiriman yang dipilih. Umumnya, pengiriman standar kami memakan waktu hingga 5 hari, sementara Pengiriman Ekspres memastikan pesanan Anda sampai dalam 1 hari. Harap dicatat bahwa waktu ini dapat berubah karena keadaan yang tidak terduga, tetapi kami melakukan yang terbaik untuk memenuhi perkiraan ini.',
];

View File

@ -0,0 +1,13 @@
@if($brands && $brands->count() > 0)
<ul class="nav flex-column gap-2 pt-sm-3 pb-3 pb-sm-0 mt-n1 mb-1 mb-sm-0">
@foreach($brands as $index => $brand)
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="{{ route('product.index',['filter[brand_id]'=>$brand->id]) }}">{{ $brand->name }}</a>
</li>
@endforeach
</ul>
@endif

View File

@ -269,7 +269,7 @@
<i class="ci-shopping-bag animate-target me-1"></i>
</a>
</div>
</div>
</div>
<!-- Main navigation that turns into offcanvas on screens < 992px wide (lg breakpoint) -->
<div class="collapse navbar-stuck-hide" id="stuckNav">

View File

@ -9,15 +9,33 @@
<!-- Nav tabs -->
<ul class="nav nav-underline justify-content-lg-center mt-n2 mt-lg-0 mb-4" role="tablist">
@foreach ($genders as $key => $gender)
<li class="nav-item" role="presentation">
<button type="button" class="nav-link text-uppercase {{ $key == 0 ? 'active' : '' }}" id="gender-{{ $gender->id }}-tab"
data-bs-toggle="tab" data-bs-target="#gender-{{ $gender->id }}-tab-pane" role="tab"
aria-controls="gender-{{ $gender->id }}-tab-pane" aria-selected="true">
{{ $gender->name }}
<button type="button" class="nav-link text-uppercase active" id="category-tab"
data-bs-toggle="tab" data-bs-target="#category-tab-pane" role="tab"
aria-controls="category-tab-pane" aria-selected="true">
Category
</button>
</li>
@endforeach
<li class="nav-item" role="presentation">
<button type="button" class="nav-link text-uppercase" id="brand-tab"
data-bs-toggle="tab" data-bs-target="#brand-tab-pane" role="tab"
aria-controls="brand-tab-pane" aria-selected="true">
Brand
</button>
</li>
<li class="nav-item" role="presentation">
<button type="button" class="nav-link text-uppercase" id="gender-tab"
data-bs-toggle="tab" data-bs-target="#gender-tab-pane" role="tab"
aria-controls="gender-tab-pane" aria-selected="true">
Gender
</button>
</li>
{{-- <li class="nav-item" role="presentation">
<button type="button" class="nav-link text-uppercase active" id="womens-tab" data-bs-toggle="tab"
data-bs-target="#womens-tab-pane" role="tab" aria-controls="womens-tab-pane"
@ -44,48 +62,76 @@
<!-- Tab panes -->
<div class="tab-content pb-xl-4">
@foreach ($genders as $key => $gender)
<div class="tab-pane fade show {{ $key == 0 ? 'active' : '' }}" id="gender-{{ $gender->id }}-tab-pane" role="tabpanel"
aria-labelledby="gender-{{ $gender->id }}-tab">
<div class="row g-4">
<div class="tab-pane fade show active" id="category-tab-pane" role="tabpanel"
aria-labelledby="category-tab">
<div class="row g-4">
@foreach ($categories as $chunks)
<div class="col-lg-2">
<ul class="nav flex-column gap-2 mt-0">
@foreach ($chunks as $chunk)
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="{{ route('product.index', ['filter[category]' => $chunk->id, 'filter[gender]' => $gender->id]) }}">{{ $chunk->name }}</a>
</li>
@endforeach
</ul>
</div>
@endforeach
<div class="col-lg-4 d-none d-lg-block" data-bs-theme="light">
<div class="position-relative d-flex flex-column h-100 rounded-4 overflow-hidden p-4">
<div
class="position-relative d-flex flex-column justify-content-between h-100 z-2 pt-xl-2 ps-xl-2">
<div class="h4 lh-base">Women's<br>Heels<br>Collection</div>
<div>
<a class="btn btn-sm btn-dark stretched-link"
href="{{ route('second', ['shop', 'catalog-fashion']) }}"
data-bs-theme="light">Shop now</a>
</div>
</div>
<img src="/img/mega-menu/fashion/01.jpg"
class="position-absolute top-0 start-0 w-100 h-100 object-fit-cover rtl-flip"
alt="Image">
@foreach ($categories as $chunks)
<div class="col-lg-2">
<ul class="nav flex-column gap-2 mt-0">
@foreach ($chunks as $chunk)
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="{{ route('product.index', ['filter[category_id]' => $chunk->id]) }}">{{ $chunk->name }}</a>
</li>
@endforeach
</ul>
</div>
</div>
</div>
</div>
@endforeach
@endforeach
</div>
</div>
<div class="tab-pane fade show" id="brand-tab-pane" role="tabpanel"
aria-labelledby="brand-tab">
<div class="row g-4">
@foreach ($brands as $chunks)
<div class="col-lg-2">
<ul class="nav flex-column gap-2 mt-0">
@foreach ($chunks as $chunk)
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="{{ route('product.index', ['filter[category_id]' => $chunk->id]) }}">{{ $chunk->name }}</a>
</li>
@endforeach
</ul>
</div>
@endforeach
</div>
</div>
<div class="tab-pane fade show" id="gender-tab-pane" role="tabpanel"
aria-labelledby="gender-tab">
<div class="row g-4">
@foreach ($genders as $chunks)
<div class="col-lg-2">
<ul class="nav flex-column gap-2 mt-0">
@foreach ($chunks as $chunk)
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="{{ route('product.index', ['filter[gender_id]' => $chunk->id]) }}">{{ $chunk->name }}</a>
</li>
@endforeach
</ul>
</div>
@endforeach
</div>
</div>
</div>
</div>

View File

@ -145,6 +145,8 @@
<ul class="dropdown-menu" style="--cz-dropdown-spacer: .75rem">
<li><a class="dropdown-item" href="{{ route('terms-and-conditions')}}">{{ __('navbar.terms_conditions') }}</a></li>
<li><a class="dropdown-item" href="{{ route('contact')}}">{{ __('navbar.contact') }}</a></li>
</ul>
</li>

File diff suppressed because it is too large Load Diff

View File

@ -75,31 +75,14 @@
</div>
<div class="accordion-item col-sm-4 border-0">
<h6 class="accordion-header" id="membersHeading">
<span class="text-dark-emphasis d-none d-sm-block">For members</span>
<span class="text-dark-emphasis d-none d-sm-block">Brands</span>
<button type="button" class="accordion-button collapsed py-3 d-sm-none"
data-bs-toggle="collapse" data-bs-target="#membersLinks" aria-expanded="false"
aria-controls="membersLinks">For members</button>
aria-controls="membersLinks">Brands</button>
</h6>
<div class="accordion-collapse collapse d-sm-block" id="membersLinks"
aria-labelledby="membersHeading" data-bs-parent="#footerLinks">
<ul class="nav flex-column gap-2 pt-sm-3 pb-3 pb-sm-0 mt-n1 mb-1 mb-sm-0">
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="#!">Licenses</a>
</li>
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="#!">Return policy</a>
</li>
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="#!">Payment methods</a>
</li>
<li class="d-flex w-100 pt-1">
<a class="nav-link animate-underline animate-target d-inline fw-normal text-truncate p-0"
href="#!">Become a vendor</a>
</li>
</ul>
<x-footer-brands />
</div>
<hr class="d-sm-none my-0">
</div>

View File

@ -18,6 +18,8 @@ use App\Http\Controllers\SearchController;
use App\Http\Controllers\TncController;
use App\Http\Controllers\HelpController;
use App\Http\Controllers\VoucherEventController;
use App\Http\Controllers\ContactController;
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => '/dummy'], function () {
@ -125,3 +127,4 @@ Route::middleware(['auth'])->prefix('/orders')->group(function () {
});
Route::get('/terms-and-conditions', [TncController::class, 'index'])->name('terms-and-conditions');
Route::get('/help', [HelpController::class, 'index'])->name('help');
Route::get('/contact', [ContactController::class, 'index'])->name('contact');