presseportale/resources/views/web/presseecho.blade.php
Kevin Adametz 9f44546082 web/admin/pdf: gemeinsame Bildnachweis-Auflösung, Detailfenster am Artikelbild, Bestätigungsstand in Kunden- und Adminansicht, Wortwahl „automatisierte Prüfung" (Bildkennzeichnung Block D)
- App\Support\ImageCredit: Foto/Quelle-Zeile, KI-Hinweis mit Herkunft, Verantwortlich-Zeile nur mit Protokoll, sichere Links; PDF-Zeilen mit Bestätigungskennung
- Artikelseite: Overlay (eigenes i-Zeichen, Alpine ohne Plugin, Bottom-Sheet auf Mobil) mit Nachweis, Lizenz, Quelle, KI-Hinweis, Verantwortlich-Zeile, „Bild melden"
- Richtlinien 0.2: Prüfung als automatisiert beschrieben, Abschnitt „Bilder" (Decision-Update 3.5); Taglines, Suche, Newsrooms, Startseiten-CTA, Mails ohne „qualitätsgeprüft"
- Cache-Invalidierung bei Bildwechsel an veröffentlichten Meldungen; PHPStan-Baseline für das Resource bereinigt

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 09:44:34 +00:00

94 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@extends('web.layouts.web-master')
@php
use App\Support\StructuredData;
$brand = config('domains.domains.presseecho.brand', []);
// SEO: WebSite-Markup mit Sitelinks-Searchbox (SearchAction auf /suche).
$portalBase = StructuredData::portalBase($domainUrl ?? null);
$brandFullName = ($brand['name'] ?? 'presse').($brand['accent'] ?? 'echo');
$jsonLd = [
'@context' => 'https://schema.org',
'@graph' => [
[
'@type' => 'WebSite',
'name' => $brandFullName,
'url' => $portalBase.'/',
'inLanguage' => app()->getLocale(),
'potentialAction' => [
'@type' => 'SearchAction',
'target' => [
'@type' => 'EntryPoint',
'urlTemplate' => $portalBase.'/'.app()->getLocale().'/suche?q={search_term_string}',
],
'query-input' => 'required name=search_term_string',
],
],
StructuredData::publisher($portalBase),
],
];
@endphp
@section('structured_data')
<x-web.structured-data :data="$jsonLd" />
@endsection
{{-- DE-Meta kommt brand-spezifisch aus config/domains.php, EN aus den Übersetzungsdateien. --}}
@section('title', app()->getLocale() === 'de'
? ($brand['meta_title'] ?? 'Aktuelle Pressemitteilungen aus Wirtschaft & Industrie – presseecho')
: __('web.meta.home_title', ['brand' => ($brand['name'] ?? 'presseecho').($brand['accent'] ?? '')]))
@section('meta_description', app()->getLocale() === 'de'
? ($brand['meta_description'] ?? 'Pressemitteilungen aus Wirtschaft und Industrie im DACH-Raum — automatisiert geprüft, strukturiert distribuiert.')
: __('web.meta.home_description'))
@section('hreflang')
<link rel="alternate" hreflang="de" href="{{ url('/de') }}">
<link rel="alternate" hreflang="en" href="{{ url('/en') }}">
<link rel="alternate" hreflang="x-default" href="{{ url('/de') }}">
@endsection
@section('feed_links')
<link rel="alternate" type="application/rss+xml" title="{{ __('web.rss.portal_link_title', ['brand' => ($brand['name'] ?? 'presseecho').($brand['accent'] ?? '')]) }}" href="{{ rtrim($domainUrl ?? config('app.url'), '/') }}/{{ app()->getLocale() }}/feed">
@endsection
@section('content')
<x-web.site-header />
<main class="bg-bg text-ink">
<x-web.focus-hero
:lead-release="$leadRelease ?? null"
:side-releases="$sideReleases ?? []"
:boosted-ids="$boostedIds ?? []" />
<section class="max-w-layout mx-auto px-4 sm:px-6 lg:px-8 mt-16">
<div class="grid gap-9 grid-cols-1 lg:grid-cols-[1.7fr_1fr]">
<livewire:web.press-release-feed :portal="\App\Enums\Portal::Presseecho->value" :language="app()->getLocale()" />
<aside class="flex flex-col gap-9">
<x-web.most-read :releases="$mostReadReleases ?? []" />
<x-web.publisher-cta />
<x-web.active-newsrooms :companies="$activeNewsrooms ?? []" />
</aside>
</div>
</section>
<x-web.industry-spotlight
:industry="$spotlight['industry'] ?? null"
:stats="$spotlight['stats'] ?? null"
:releases="$spotlight['releases'] ?? []" />
<x-web.industry-index :industries="($industryIndex ?? collect())->isNotEmpty() ? $industryIndex->toArray() : null" />
<x-web.pricing-teaser />
{{-- Newsletter-Sektion bewusst entfernt (Double-Opt-in nachgelagert,
siehe dev/release/entwicklungsplan-release.md) — stattdessen Veröffentlichen-CTA. --}}
<x-web.publish-band />
<x-web.quality-summary :stats="$homeStats ?? []" />
</main>
<x-web.site-footer />
@endsection