{{-- ============================================================================ PAGE CONTENT — Artikel / Halaman Teks (MAKLUMAT KORPORAT dan lain-lain) Site : nres · Page slug: article · Page ID: auto (dicipta oleh apply-article.php) Satu halaman untuk SEMUA item teks (Amanat YBM, Latar Belakang, Visi/Misi, Piagam Pelanggan, Ketua Pegawai Digital (CDO), Pencapaian dan Anugerah, FAQ, …) URL: /nres/article → hab: senarai artikel subkat CORPORATE /nres/article/cdo → laluan cantik (CMS fallback: subSlug = article_code) /nres/article?id=cdo → query param (juga berfungsi) Sumber data: content_article + content_article_translation · artikel_translation_content = HTML (Summernote) → dirender {!! !!} · BM/EN ikut session('locale'), fallback article_translation_main = 1 Nota: · SEMUA logik + markup + CSS ada dalam fail ini — tiada komponen, tiada partial. · Warna guna CSS variable tema (--teal/--green/--fade/--line/--ink) → dark mode. ============================================================================ --}} @php /* -------------------------------------------------------------------- | 1. Parameter & konteks -------------------------------------------------------------------- */ $artBase = url(trim(((string) ($siteSlug ?? '')).'/article', '/')); $artLang = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms'; $artCode = trim((string) request()->query('id', '')); $artCode = preg_match('/^[A-Za-z0-9._-]{1,80}$/', $artCode) ? $artCode : ''; $artToday = now()->toDateString(); // Label kategori/subkategori (ref) $artCatLabel = []; $artSubLabel = []; foreach (DB::table('ref')->whereIn('cat', ['ARTICLE_CAT', 'ARTICLE_SUBCAT'])->get() as $artRef) { $label = $artLang === 'en' ? ((string) ($artRef->descr_en ?: $artRef->descr)) : ((string) $artRef->descr ?: $artRef->descr_en); if ($artRef->cat === 'ARTICLE_CAT') { $artCatLabel[(string) $artRef->code] = $label; } else { $artSubLabel[(string) $artRef->code] = $label; } } // Kumpulan menu (breadcrumb) ikut subkategori artikel $artGroups = [ 'CORPORATE' => ['ms' => 'Maklumat Korporat', 'en' => 'Corporate Information'], ]; $artGroupLabel = function ($subCode, $catCode) use ($artGroups, $artSubLabel, $artCatLabel, $artLang) { $subCode = (string) $subCode; $catCode = (string) $catCode; if (isset($artGroups[$subCode])) { return $artGroups[$subCode][$artLang]; } // Fallback: artikel kategori ARTICLE tanpa subkategori = halaman teks korporat if ($subCode === '' && $catCode === 'ARTICLE') { return $artGroups['CORPORATE'][$artLang]; } return $artSubLabel[$subCode] ?? ($artCatLabel[$catCode] ?? ''); }; $artDate = function ($value) use ($artLang) { if (blank($value)) { return ''; } $months = $artLang === 'en' ? [1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] : [1 => 'Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai', 'Ogos', 'September', 'Oktober', 'November', 'Disember']; try { $date = \Carbon\Carbon::parse($value); return $date->day.' '.$months[(int) $date->month].' '.$date->year; } catch (\Throwable $e) { return (string) $value; } }; $artFile = function ($path) { $path = trim((string) $path); if ($path === '') { return ''; } if (str_starts_with($path, 'http://') || str_starts_with($path, 'https://')) { return $path; } if (str_starts_with($path, 'dynaweb4/')) { return asset($path); } return asset('storage/'.ltrim($path, '/')); }; $artWindow = function ($query) use ($artToday) { return $query ->where(function ($q) use ($artToday) { $q->whereNull('article_start_date')->orWhere('article_start_date', '')->orWhere('article_start_date', '<=', $artToday); }) ->where(function ($q) use ($artToday) { $q->whereNull('article_end_date')->orWhere('article_end_date', '')->orWhere('article_end_date', '>=', $artToday); }); }; /* -------------------------------------------------------------------- | 2. Muat artikel (?id=) + terjemahan -------------------------------------------------------------------- */ $artArticle = null; $artTr = null; if ($artCode !== '') { $artArticle = $artWindow( DB::table('content_article') ->where('article_code', $artCode) ->whereIn('article_status', ['ACTIVE', 'PUBLISHED']) ->where('article_category', '!=', 'FAQ') )->first(); if ($artArticle) { $artTrRows = DB::table('content_article_translation') ->where('article_translation_parent_id', $artArticle->article_id) ->get(); $artTr = $artTrRows->firstWhere('article_translation_language', $artLang) ?? $artTrRows->firstWhere('article_translation_main', 1) ?? $artTrRows->first(); } } // Artikel dianggap dijumpai hanya jika ada terjemahan bertajuk $artFound = (bool) ($artArticle && $artTr && filled($artTr->article_translation_title)); /* -------------------------------------------------------------------- | 3. Senarai artikel (hab + pautan berkaitan) -------------------------------------------------------------------- */ $artRows = $artWindow( DB::table('content_article')->whereIn('article_status', ['ACTIVE', 'PUBLISHED']) ->where('article_category', '!=', 'FAQ') ) ->orderBy('article_sorting') ->orderByDesc('article_date') ->orderByDesc('article_id') ->get(); $artIds = $artRows->pluck('article_id')->all(); $artTrAll = $artIds ? DB::table('content_article_translation') ->whereIn('article_translation_parent_id', $artIds) ->get() ->groupBy('article_translation_parent_id') : collect(); $artItems = []; foreach ($artRows as $artRow) { $artRowTr = $artTrAll[$artRow->article_id] ?? collect(); $artRowTr = $artRowTr->firstWhere('article_translation_language', $artLang) ?? $artRowTr->firstWhere('article_translation_main', 1) ?? $artRowTr->first(); $artItems[] = [ 'code' => (string) $artRow->article_code, 'date' => (string) ($artRow->article_date ?? ''), 'title' => (string) ($artRowTr->article_translation_title ?? ''), 'body' => (string) ($artRowTr->article_translation_content ?? ''), 'img' => $artFile($artRow->article_image), 'url' => (string) ($artRow->article_url ?? ''), 'cat' => (string) ($artRow->article_category ?? ''), 'sub' => (string) ($artRow->article_subcategory ?? ''), 'group' => $artGroupLabel($artRow->article_subcategory, $artRow->article_category), ]; } $artItems = array_values(array_filter($artItems, fn ($i) => $i['title'] !== '')); // Item kumpulan sama (pautan berkaitan) $artGroupCode = $artFound ? (string) $artArticle->article_subcategory : ''; $artGroupItems = $artGroupCode === '' ? [] : array_values(array_filter($artItems, fn ($i) => $i['sub'] === $artGroupCode)); $artRelated = array_values(array_filter($artGroupItems, fn ($i) => ! $artFound || $i['code'] !== $artCode)); // Hab: kumpulan CORPORATE (semua item teks korporat); fallback semua artikel $artHubItems = array_values(array_filter($artItems, fn ($i) => $i['sub'] === 'CORPORATE')); if (! $artHubItems) { $artHubItems = $artItems; } $artSummary = fn ($html, $limit = 170) => \Illuminate\Support\Str::limit( trim(preg_replace('/\s+/u', ' ', strip_tags((string) $html))), $limit ); // Nilai sedia untuk markup $artGroupLabelText = $artFound ? $artGroupLabel($artArticle->article_subcategory, $artArticle->article_category) : ''; $artSubLabelText = $artFound ? ($artSubLabel[(string) $artArticle->article_subcategory] ?? '') : ''; $artCatLabelText = $artFound ? ($artCatLabel[(string) $artArticle->article_category] ?? '') : ''; $artImg = $artFound ? $artFile($artArticle->article_image) : ''; $artUrl = $artFound ? trim((string) ($artArticle->article_url ?? '')) : ''; $artTitle = $artFound ? (string) $artTr->article_translation_title : ''; $artBody = $artFound ? (string) ($artTr->article_translation_content ?? '') : ''; $artDateText = $artFound ? $artDate($artArticle->article_date) : ''; @endphp
@if ($artFound) {{-- ============================ BREADCRUMB ============================ --}} {{-- ============================== TAJUK ============================== --}}
@if ($artDateText !== '')
{{ $artLang === 'en' ? 'Date' : 'Tarikh' }}: {{ $artDateText }}
@endif
{{-- ====================== KANDUNGAN + PAutan BERKAITAN ====================== --}}
@if (! empty($artRelated)) @endif
@else {{-- ================== TIDAK DIJUMPAI (kod diberi) ================== --}} @if ($artCode !== '')

{{ $artLang === 'en' ? 'Page not found' : 'Halaman tidak dijumpai' }}

{{ $artLang === 'en' ? 'No page matches this address' : 'Tiada halaman sepadan dengan alamat ini' }}

{{ $artLang === 'en' ? 'The page may have been moved, renamed or is not published yet.' : 'Halaman ini mungkin telah dipindahkan, dinamakan semula atau belum diterbitkan.' }}

{{ $artLang === 'en' ? 'View page list' : 'Lihat senarai halaman' }}
@else {{-- ============================== HAB ============================== --}}

{{ $artLang === 'en' ? 'Corporate Information' : 'Maklumat Korporat' }}

{{ $artLang === 'en' ? 'Corporate information of the Ministry of Natural Resources and Environmental Sustainability.' : 'Maklumat korporat Kementerian Sumber Asli dan Kelestarian Alam.' }}

@if (count($artHubItems) > 0) @else
{{ $artLang === 'en' ? 'No pages yet' : 'Belum ada halaman' }}

{{ $artLang === 'en' ? 'No corporate information pages have been published yet.' : 'Belum ada halaman maklumat korporat diterbitkan.' }}

@endif @endif @endif {{-- =============================== NOTA ============================== --}}
{{ $artLang === 'en' ? 'Note' : 'Nota' }}: @if ($artLang === 'en') This page is managed through the Article module. For any correction or enquiry, please contact the Corporate Communications Division at +603 8091 7000. @else Halaman ini diuruskan melalui modul Artikel. Bagi sebarang pembetulan atau pertanyaan, sila hubungi Bahagian Komunikasi Korporat di talian +603 8091 7000. @endif