{{-- ============================================================ DETAIL NEWS GAPKINDO — Elegant Article Page Struktur: 1. Banner header (navy + checkerboard, compact) 2. Hero section: title + meta (date, source) 3. Featured image (large, hero-style) 4. Article body (readable typography, max-width) 5. Article footer: print, share, info card 6. CTA back to news list + home ============================================================ --}} @extends('guest.layouts.master') @section('title', $dataNews->title . ' | GAPKINDO') @php // ===== OG image URL via generator endpoint (auto 1200x630 JPEG) ===== // Pakai url() (bukan route()) supaya tidak 500 jika route name belum kebaca. // Timestamp cache-busting: pakai updated_at (atau created_at fallback) $ogTs = strtotime($dataNews->updated_at ?? $dataNews->created_at ?? 'now'); $ogImageUrl = url('/og-image/' . $dataNews->slug) . '?t=' . $ogTs; // Strip HTML + truncate untuk description $ogDesc = \Illuminate\Support\Str::limit(strip_tags($dataNews->content ?? ''), 200); @endphp @push('meta') {{-- ===== Open Graph (WhatsApp, Facebook, LinkedIn, Telegram) ===== --}} @if(!empty($dataNews->source)) @endif {{-- ===== Twitter Card ===== --}} {{-- ===== Standard SEO ===== --}} @endpush @push('styles') @endpush @section('content') @php $publishDate = $dataNews->created_at ? \Carbon\Carbon::parse($dataNews->created_at)->locale('id')->isoFormat('D MMMM Y') : '-'; $relativeDate = $dataNews->created_at ? \Carbon\Carbon::parse($dataNews->created_at)->diffForHumans() : ''; // Content dari Summernote sudah berupa HTML (sudah ada
, , dll).
// Tidak perlu split by newline lagi — langsung render via {!! ... !!}
$content = trim($dataNews->content ?? '');
// Reading time estimation (~200 words per minute for Indonesian)
$wordCount = str_word_count(strip_tags($content));
$readingTime = max(1, ceil($wordCount / 200));
@endphp
{{ $dataNews->title }}