@php // Função helper para extrair texto do content_json (TipTap/ProseMirror) if (!function_exists('extractTextFromJson')) { function extractTextFromJson($node) { $text = ''; if (!is_array($node)) { return $text; } // Se é um nó de texto, retornar o texto if (isset($node['type']) && $node['type'] === 'text' && isset($node['text'])) { return $node['text']; } // Processar conteúdo recursivamente if (isset($node['content']) && is_array($node['content'])) { foreach ($node['content'] as $child) { $text .= extractTextFromJson($child); } } return $text; } } @endphp @if ($relatedArticles && $relatedArticles->count() > 0)
Artigos relacionados
@foreach ($relatedArticles as $relatedArticle) @php $relatedImage = $relatedArticle->topImage ?? $relatedArticle->featuredImage; $hasImage = $relatedImage && $relatedImage->file_url; $relatedImageUrl = $hasImage ? $relatedImage->file_url : null; $relatedUrl = url("/{$relatedArticle->slug}"); $relatedReadingTime = calculateReadingTime($relatedArticle->body); $relatedAuthorName = $relatedArticle->authorUser?->name ?? ($relatedArticle->author_name ?? ($relatedArticle->author ?? 'Redação')); $relatedAuthorAvatar = $relatedArticle->authorUser?->avatar_url ?? '/assets/theme/v6/images/profile_1-120x120.jpeg'; $shareUrl = urlencode($relatedUrl); $shareTitle = urlencode($relatedArticle->title); $shareImage = urlencode($relatedImageUrl ?? ''); // Se não tem imagem, sempre mostrar 100 caracteres do corpo (body ou content_json) if (!$hasImage) { $bodyText = ''; // Tentar usar body primeiro if ($relatedArticle->body) { $bodyText = strip_tags($relatedArticle->body); } // Se body está vazio, tentar extrair de content_json if (empty($bodyText) && $relatedArticle->content_json) { $contentJson = is_string($relatedArticle->content_json) ? json_decode($relatedArticle->content_json, true) : $relatedArticle->content_json; if (is_array($contentJson)) { $bodyText = extractTextFromJson($contentJson); } } $descriptionText = $bodyText ? \Illuminate\Support\Str::limit($bodyText, 200) : ''; } else { $descriptionText = $relatedArticle->headline ?? ($relatedArticle->excerpt ?? ''); $descriptionText = $descriptionText ? \Illuminate\Support\Str::limit($descriptionText, 200) : ''; } @endphp
@if ($hasImage)
{{ $relatedArticle->title }}
@endif
@if ($relatedArticle->section) {{ $relatedArticle->section->name }} @endif

{{ $relatedArticle->title }}

@if ($descriptionText)

{{ $descriptionText }}

@endif
@endforeach
@endif