b2in/packages/flux-cms/components/resources/views/livewire/frontend/page-renderer.blade.php
2025-10-20 17:50:35 +02:00

77 lines
No EOL
3.1 KiB
PHP

<div class="flux-cms-page" data-page-id="{{ $page->id }}">
{{-- SEO Meta Tags (if not handled by layout) --}}
@pushOnce('meta')
<title>{{ $page->getSeoTitle() }}</title>
<meta name="description" content="{{ $page->getSeoDescription() }}">
@if($page->meta_keywords)
<meta name="keywords" content="{{ $page->meta_keywords }}">
@endif
{{-- Open Graph --}}
<meta property="og:title" content="{{ $page->getSeoTitle() }}">
<meta property="og:description" content="{{ $page->getSeoDescription() }}">
<meta property="og:type" content="website">
<meta property="og:url" content="{{ $page->getUrl() }}">
{{-- Twitter Card --}}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ $page->getSeoTitle() }}">
<meta name="twitter:description" content="{{ $page->getSeoDescription() }}">
@endPushOnce
{{-- Page Content --}}
<div class="space-y-8">
@forelse($components as $component)
@if($component->is_active)
<div class="flux-cms-component"
data-component-id="{{ $component->id }}"
data-component-type="{{ $component->component_type }}"
@if($component->settings['css_classes'] ?? false)
class="{{ $component->settings['css_classes'] }}"
@endif>
{{-- Render the actual Livewire component --}}
@livewire($component->component_type, [
'content' => $component->content,
'settings' => $component->settings,
'componentId' => $component->id
], key('component-'.$component->id))
</div>
@endif
@empty
{{-- Empty state for pages with no components --}}
<div class="text-center py-16">
<div class="max-w-md mx-auto">
<h1 class="text-3xl font-bold text-gray-900 mb-4">
{{ $page->title }}
</h1>
@if($page->content)
<div class="prose prose-lg text-gray-600">
{!! $page->content !!}
</div>
@else
<p class="text-gray-600">
This page doesn't have any content components yet.
</p>
@endif
</div>
</div>
@endforelse
</div>
{{-- JSON-LD Structured Data --}}
@pushOnce('structured-data')
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "{{ $page->getSeoTitle() }}",
"description": "{{ $page->getSeoDescription() }}",
"url": "{{ $page->getUrl() }}",
"dateModified": "{{ $page->updated_at->toISOString() }}",
"inLanguage": "{{ app()->getLocale() }}"
}
</script>
@endPushOnce
</div>