presseportale/resources/views/components/web/site-footer.blade.php
Kevin Adametz ff75159b8f web: RSS-Feed je Newsroom, RSS-Übersichtsseite, „RSS" in der Topleiste (Roadmap 3.1, Nachtrag)
- /{edition}/newsroom/{slug}/feed: Sichtbarkeit wie die Newsroom-Seite
  (aktiv, nicht entfernt, mindestens eine Meldung), Prüfung vor dem Cache,
  301 bei zusammengeführter Firma; Autodiscovery und Link „RSS-Feed" auf
  der Newsroom-Seite; Hub leitet auf das Portal der Firma.
- /{edition}/rss (RssPageController, static.rss DE/EN): Was RSS ist, wie
  ein Reader funktioniert, Hauptfeed, alle Branchen-Feeds mit Adresse,
  Muster des Newsroom-Feeds, Hinweise. Portalseite mit Portal-Kontext,
  Hub → presseecho, in Sitemap und llms.txt.
- Topleiste, Burger-Menü und Footer verlinken RSS neben FAQ/Hilfe/API.
- FeedController in portal/category/newsroom aufgeteilt; Panel
  „Auslieferung" nennt zusätzlich den Newsroom-Feed.
- Tests: FeedTest (+3), RssPageTest (4), StaticPagesTest, VisibilityStatsTest.
- dev/2026-09-01: Nachtrag in Protokoll Teil 11 und Roadmap 3.1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 08:27:14 +00:00

89 lines
5.4 KiB
PHP

@props([
'brand' => null,
])
@php
$themeKey = config('app.theme');
$brand = $brand ?? config('domains.domains.'.$themeKey.'.brand', [
'name' => 'businessportal',
'accent' => '24',
'tagline_short' => 'Pressemitteilungen · DACH',
'tagline_long' => 'Veröffentlichungs-Portal für qualitätsgeprüfte Pressemitteilungen aus Deutschland, Österreich und der Schweiz.',
'footer_legal' => '© :year businessportal24 · Alle Rechte vorbehalten',
'about_label' => 'Über businessportal24',
]);
$brandName = $brand['name'] ?? 'businessportal';
$brandAccent = $brand['accent'] ?? '';
// Taglines lokalisiert (web.footer.*); Brand-Config bleibt Fallback für
// Themes ohne eigenen Übersetzungsschlüssel.
$brandTagline = __('web.footer.tagline_short');
$brandTaglineLong = \Illuminate\Support\Facades\Lang::has('web.footer.tagline_long_'.$themeKey)
? __('web.footer.tagline_long_'.$themeKey)
: ($brand['tagline_long'] ?? 'Pressemitteilungen aus dem DACH-Raum.');
// Betreiber-Postfach (adametz.media) als Fallback, bis die portal-
// spezifischen CONTACT_EMAIL_*-Adressen gesetzt sind (R2.1).
$contactEmail = $brand['contact_email'] ?? 'info@businessportal24.com';
$legal = __('web.footer.rights', ['year' => now()->format('Y'), 'brand' => $brandName.$brandAccent]);
@endphp
<footer class="mt-16 bg-topbar-grad text-ink-on-dark">
<div class="max-w-layout mx-auto px-8 py-12 grid gap-10 grid-cols-1 md:grid-cols-2 lg:grid-cols-[1.4fr_1fr_1fr_1fr]">
<div>
<a href="{{ route('web.home') }}" class="block cursor-pointer group" aria-label="{{ $brandName }}{{ $brandAccent }} {{ __('web.header.homepage') }}">
<div class="text-[24px] font-semibold leading-none tracking-[-0.5px]">
<x-web.brand-mark :brand="$themeKey" variant="on-dark" />
</div>
<div class="eyebrow mt-2 text-[9.5px] tracking-[0.18em] text-ink-on-dark-muted">
{{ $brandTagline }}
</div>
</a>
<p class="text-[12.5px] text-white/55 leading-[1.55] mt-4 max-w-[320px]">
{{ $brandTaglineLong }}
</p>
</div>
<div>
<div class="eyebrow mb-3.5">{{ __('web.footer.sections') }}</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
@foreach (\App\Support\CategoryNavigation::items(5) as $footerCategory)
<li><a href="{{ $footerCategory['href'] }}" class="cursor-pointer hover:text-white transition-colors">{{ $footerCategory['label'] }}</a></li>
@endforeach
<li><a href="{{ route('newsrooms') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.newsrooms') }}</a></li>
</ul>
</div>
<div>
<div class="eyebrow mb-3.5">{{ __('web.footer.for_companies') }}</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
<li><a href="{{ route('veroeffentlichen') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.publish') }}</a></li>
<li><a href="{{ route('preise') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.pricing') }}</a></li>
<li><a href="{{ route('api') }}" class="cursor-pointer hover:text-white transition-colors">API</a></li>
<li><a href="{{ route('rss') }}" class="cursor-pointer hover:text-white transition-colors">RSS</a></li>
</ul>
</div>
<div>
<div class="eyebrow mb-3.5">{{ __('web.footer.company') }}</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
<li><button type="button" x-data @click="$dispatch('open-contact-modal')" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.contact') }}</button></li>
<li><a href="{{ route('faq') }}" class="cursor-pointer hover:text-white transition-colors">FAQ</a></li>
<li><a href="{{ route('hilfe') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.help') }}</a></li>
<li><a href="{{ route('kuendigung') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.cancellation') }}</a></li>
<li><a href="{{ route('impressum') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.imprint') }}</a></li>
<li><a href="{{ route('datenschutz') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.privacy') }}</a></li>
</ul>
</div>
</div>
<div class="border-t border-white/10">
<div class="max-w-layout mx-auto px-8 py-5 flex items-center justify-between gap-4 text-[11.5px] text-white/50 flex-wrap">
<span>{{ $legal }}</span>
<span class="flex items-center gap-4 flex-wrap">
<a href="{{ route('agb') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.terms') }}</a>
<a href="{{ route('richtlinien') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.guidelines') }}</a>
<a href="{{ route('melden') }}" class="cursor-pointer hover:text-white transition-colors">{{ __('web.footer.report') }}</a>
</span>
</div>
</div>
</footer>