@extends('layouts.store') @section('content') @php // ===== Helpers / Inputs ===== /** @var \App\Models\StoreSetting $s */ $currency = $s->currency_code ?? '$'; $nlBtn = __('messages.Subscribe'); /** @var \Illuminate\Support\Collection $banners */ $byPos = collect($banners ?? [])->groupBy('position'); $printedCenter = false; // Reusable banner renderer (keeps markup DRY) $renderBanners = function($list) { foreach ($list ?? collect() as $b) { $src = $b->image_url ?? ($b->image ? asset($b->image) : asset('images/brands/no-image.png')); $href = $b->link ?: route('store.shop'); echo ''.e($b->title ?? __('messages.Banner')).''; } }; @endphp {{-- ===== TOP (left / right) ===== --}} @if(($byPos['top_left'] ?? collect())->count() || ($byPos['top_right'] ?? collect())->count())
{!! $renderBanners($byPos['top_left'] ?? collect()) !!}
{!! $renderBanners($byPos['top_right'] ?? collect()) !!}
@endif @forelse($blocks as $block) @switch($block['type']) {{-- ===== HERO ===== --}} @case('hero')

{{ $block['title'] ?? $s->hero_title }}

{{ $block['subtitle'] ?? $s->hero_subtitle }}

{{ __('messages.ShopNow') }}
@php $heroImg = $block['image'] ?? $s->hero_image_path; $localFallback = public_path('store_files/hero_image.jpg'); $heroUrl = null; if ($heroImg && file_exists(public_path($heroImg))) { $heroUrl = asset($heroImg); } elseif (file_exists($localFallback)) { $heroUrl = asset('store_files/hero_image.jpg'); } else { $heroUrl = 'https://picsum.photos/seed/hero-store/960/520'; } @endphp Hero
{{-- ===== CENTER (left / right) — print once after the first hero ===== --}} @if(!$printedCenter && ( ($byPos['center_left'] ?? collect())->count() || ($byPos['center_right'] ?? collect())->count() ))
{!! $renderBanners($byPos['center_left'] ?? collect()) !!}
{!! $renderBanners($byPos['center_right'] ?? collect()) !!}
@php $printedCenter = true; @endphp @endif @break {{-- ===== COLLECTION GRID ===== --}} @case('collection') @php /** @var \App\Models\Collection $col */ $col = $block['collection']; $prods = $block['products'] ?? collect(); $title = $block['title'] ?? ($col->title ?? $col->name ?? __('messages.Collection')); @endphp @if($prods->count())
@foreach($prods as $p) @php // Image & description $imgUrl = $p->image ? asset('images/products/' . $p->image) : asset('images/products/no-image.png'); $descShort = \Illuminate\Support\Str::limit(strip_tags($p->note ?? ''), 600); // Already computed by controller via $p->minDisplayPrice(...) $minPrice = (float) ($p->display_price ?? ($p->price ?? 0)); // Variants payload: use backend-computed display_price $variants = collect($p->variants ?? []); $variantPayload = $variants->map(function($v) use ($currency) { $final = (float) ($v->display_price ?? ($v->price ?? 0)); return [ 'id' => (int) ($v->id ?? 0), 'name' => (string) ($v->name ?? ''), 'price' => (float) ($v->price ?? 0), // base, informational 'display_price' => $final, // final, show/use this 'display_price_formatted' => $currency . number_format($final, 2), 'image' => !empty($v->image) ? asset('images/products/' . $v->image) : null, ]; })->values(); @endphp
{{ $p->name }} {{-- Quick View --}}
{{ $p->name }}
{{ $currency }}{{ number_format($minPrice, 2) }}
@endforeach
@endif @break {{-- ===== NEWSLETTER ===== --}} @case('newsletter') @php $nlTitle = $s->newsletter_title ?? __('messages.GetFreshDealsTitle'); $nlSubtitle = $s->newsletter_subtitle ?? __('messages.GetFreshDealsSubtitle'); $nlPlaceholder = $s->newsletter_placeholder ?? __('messages.NewsletterEmailPlaceholder'); @endphp

{{ $nlTitle }}

{{ $nlSubtitle }}
@csrf
@break @endswitch @empty {{-- ===== CENTER (left / right) after fallback hero ===== --}} @if(!$printedCenter && ( ($byPos['center_left'] ?? collect())->count() || ($byPos['center_right'] ?? collect())->count() ))
{!! $renderBanners($byPos['center_left'] ?? collect()) !!}
{!! $renderBanners($byPos['center_right'] ?? collect()) !!}
@php $printedCenter = true; @endphp @endif @endforelse {{-- ===== If no hero rendered, still print CENTER once ===== --}} @if(!$printedCenter && ( ($byPos['center_left'] ?? collect())->count() || ($byPos['center_right'] ?? collect())->count() ))
{!! $renderBanners($byPos['center_left'] ?? collect()) !!}
{!! $renderBanners($byPos['center_right'] ?? collect()) !!}
@endif {{-- ===== FOOTER (left / right) ===== --}} @if(($byPos['footer_left'] ?? collect())->count() || ($byPos['footer_right'] ?? collect())->count())
{!! $renderBanners($byPos['footer_left'] ?? collect()) !!}
{!! $renderBanners($byPos['footer_right'] ?? collect()) !!}
@endif {{-- ==== Quick View Modal (image + description + VARIANTS) ==== --}} {{-- ==== Variant Picker Modal ==== --}} {{-- ==== Page styles ==== --}} {{-- ==== Quick View + Variant Picker + Newsletter scripts ==== --}} @endsection