{{-- ============================================================================ COMPONENT: Slider NRES — data dari modul Content Slider (CMS) Kod komponen: slider_nres · komponen DB #22 Sumber data: · content_slider → slider_portal (slug site), slider_status = ACTIVE, slider_sort, slider_url_type (NONE/EXTERNAL/INTERNAL/FILE), slider_url, slider_url_upload, tetingkap tarikh · content_slider_translation → tajuk + imej (ms/en, fallback main=1) Fail imej/PDF: disk `public` → /storage/content-slider/… (disimpan LOKAL, tiada hotlink ke portal asal) JS carousel (auto, prev/next, dots, swipe) ada dalam layout site NRES dan hanya aktif bila elemen #cepa wujud — markup/kelas di bawah mesti kekal. ============================================================================ --}} @php $sldLang = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms'; $sldPortal = (string) ($siteSlug ?? 'nres'); $sldToday = now()->toDateString(); $sldRows = DB::table('content_slider') ->where('slider_portal', $sldPortal) ->where('slider_status', 'ACTIVE') ->orderBy('slider_sort') ->orderBy('slider_id') ->get(); $sldIds = $sldRows->pluck('slider_id')->all(); $sldTr = $sldIds ? DB::table('content_slider_translation') ->whereIn('slider_translation_parent_id', $sldIds) ->get() ->groupBy('slider_translation_parent_id') : collect(); // Laluan relatif (disk public) → URL /storage/… ; URL penuh dibiarkan $sldUrl = function ($path) { $path = trim((string) $path); if ($path === '') { return ''; } if (preg_match('#^(https?:)?//#i', $path)) { return $path; } return asset('storage/'.ltrim($path, '/')); }; // Tetingkap terbit (tarikh sahaja; nilai kosong = sentiasa aktif) $sldInWindow = function ($row) use ($sldToday) { $start = trim((string) ($row->slider_start_date ?? '')); $end = trim((string) ($row->slider_end_date ?? '')); if ($start !== '' && preg_match('/^\d{4}-\d{2}-\d{2}/', $start) && substr($start, 0, 10) > $sldToday) { return false; } if ($end !== '' && preg_match('/^\d{4}-\d{2}-\d{2}/', $end) && substr($end, 0, 10) < $sldToday) { return false; } return true; }; $sldItems = []; foreach ($sldRows as $sldRow) { if (! $sldInWindow($sldRow)) { continue; } $rows = $sldTr[$sldRow->slider_id] ?? collect(); $tr = $rows->firstWhere('slider_translation_language', $sldLang) ?? $rows->firstWhere('slider_translation_main', 1) ?? $rows->first(); if (! $tr) { continue; } $img = $sldUrl($tr->slider_translation_img); if ($img === '') { continue; } $link = ''; if ((string) $sldRow->slider_url_type === 'FILE') { $link = $sldUrl($sldRow->slider_url_upload); } elseif (in_array((string) $sldRow->slider_url_type, ['EXTERNAL', 'INTERNAL'], true)) { $link = trim((string) $sldRow->slider_url); } $sldItems[] = [ 'title' => trim((string) $tr->slider_translation_title), 'img' => $img, 'link' => $link, ]; } $sldTotal = count($sldItems); @endphp @if ($sldTotal > 0)
@foreach ($sldItems as $sldIndex => $sldItem)
@if ($sldItem['link'] !== '') {{ $sldItem['title'] }} @else {{ $sldItem['title'] }} @endif
@endforeach
{{ $sldLang === 'en' ? 'HIGHLIGHTS' : 'SOROTAN' }}
1 / {{ $sldTotal }}
@endif