{{-- ============================================================ COMPONENT: News — BERITA TERKINI + SUARA ANDA "BERITA TERKINI" kini DB-driven dari modul Content Article (kategori NEWS). Sumber data: · content_article → article_category = 'NEWS', article_status = ACTIVE, tetingkap terbit (scopePublished: tarikh + MASA), article_date, article_image, article_sorting · content_article_translation → article_translation_title + article_translation_content Imej guna helper image_url() → fallback public/dynaweb4/img/No_Image_Available.jpg. "SUARA ANDA" = 4 pautan SEBENAR ke halaman sedia ada (Aduan & Maklum Balas, Aduan Integriti, Kaji Selidik Kepuasan Pelanggan 2026, Kaji Selidik Kepuasan Digital 2026). Tiada modul konsultasi awam dalam sistem. CSS .news / .news-img / .date ada dalam Layout site NRES. Guna pada page lain: assign komponen ini + letak {!! $news_nres !!}. ============================================================ --}} @php $nwsLang = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms'; $nwsRows = \App\Models\Backend\ContentArticle::query() ->where('article_category', 'NEWS') ->published() ->orderByDesc('article_date') ->orderByDesc('article_id') ->limit(3) ->get(); $nwsIds = $nwsRows->pluck('article_id')->all(); $nwsTr = $nwsIds ? DB::table('content_article_translation') ->whereIn('article_translation_parent_id', $nwsIds) ->get() ->groupBy('article_translation_parent_id') : collect(); $nwsMonths = [ 'ms' => [1 => 'Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai', 'Ogos', 'September', 'Oktober', 'November', 'Disember'], 'en' => [1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], ]; $nwsItems = []; foreach ($nwsRows as $nwsRow) { $rows = $nwsTr[$nwsRow->article_id] ?? collect(); $tr = $rows->firstWhere('article_translation_language', $nwsLang) ?? $rows->firstWhere('article_translation_main', 1) ?? $rows->first(); if (! $tr || trim((string) $tr->article_translation_title) === '') { continue; } $ts = $nwsRow->article_date ? strtotime((string) $nwsRow->article_date) : null; $ts = $ts ?: strtotime((string) $nwsRow->created_at); $excerpt = trim(preg_replace('/\s+/', ' ', strip_tags((string) $tr->article_translation_content))); if (mb_strlen($excerpt) > 150) { $excerpt = rtrim(mb_substr($excerpt, 0, 147)).'…'; } $nwsItems[] = [ 'title' => trim((string) $tr->article_translation_title), 'excerpt' => $excerpt, 'img' => image_url($nwsRow->article_image), 'day' => $ts ? date('d', $ts) : '', 'month' => $ts ? ($nwsMonths[$nwsLang][(int) date('n', $ts)] ?? '') : '', 'year' => $ts ? date('Y', $ts) : '', ]; } @endphp

{{ t('news.latest_news') }}

{{ t('common.view_all') }}
@forelse ($nwsItems as $nwsItem)
{{ $nwsItem['title'] }}
{{ $nwsItem['day'] }}{{ $nwsItem['month'] }}
{{ $nwsItem['year'] }}

{{ $nwsItem['title'] }}

{{ $nwsItem['excerpt'] }}

@empty

{{ t('news.no_news_available_at_the_moment') }}

@endforelse