Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing

Öffentliche Seiten auf gemeinsames Editorial-Design (x-web.site-header/-footer,
Design-Tokens) und Ausgaben-Präfix /{edition}/ (de|en) umgestellt.

- Routing: neue Middleware SetEdition (Locale + URL::defaults), /{edition}-Gruppe
  in routes/web.php, Root-Redirect auf /de, 301 für Legacy-.html-URLs,
  Baseline-Default in AppServiceProvider.
- Neue URL-Schemata: /{edition}/press-release/{slug}, /{edition}/category/{slug}.
- Ausgabe = Sprache: DE/EN-Umschalter (Region/CH/AT entfernt); EditorialClock
  und Livewire-Komponenten sprachdynamisch.
- Detail-, Kategorie- und Veröffentlichen-Seite mit echten Daten neu aufgebaut.
- Suche aktiviert: Volt-Komponente livewire/web/search (Titel/Text/Keywords +
  Firma + Rubrik, Filter, Sortierung, Pagination, URL-Parameter q/category/sort).
- Rubriken-Navigation statt Übersichtsseite: Helper CategoryNavigation;
  web/kategorien.blade.php + Route entfernt (Legacy-301).
- Tests: Edition-Routing, Kategorie-Seite/-Navigation, Detail, Veröffentlichen,
  Suche, EditorialClock. Doku in "Echte öffentliche Unterseiten.md" aktualisiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-06-16 16:39:28 +00:00
parent a0547208d3
commit 253141c6dc
64 changed files with 4457 additions and 2971 deletions

View file

@ -0,0 +1,47 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Symfony\Component\HttpFoundation\Response;
/**
* Setzt die aktive Ausgabe (Sprache) für den Public-Frontend-Request.
*
* Das Frontend wird unter einem Sprach-Präfix ausgeliefert: `/de/...` und
* `/en/...`. Die Ausgabe entspricht 1:1 der Inhalts-Sprache.
*
* Aufgaben:
* 1. Ausgabe aus dem ersten URL-Segment lesen (de|en), sonst Fallback `de`.
* 2. `URL::defaults(['edition' => …])` setzen, damit benannte Routen
* (`route('kategorie', …)`) das Präfix automatisch erhalten auch auf
* Seiten ohne Edition-Präfix (Hub/Auth) bleibt so ein gültiger Default.
* 3. App-Locale nur für echte Edition-URLs übernehmen, damit Admin-/Hub-Seiten
* ihre eigene Locale behalten.
*/
class SetEdition
{
/**
* @var array<int, string>
*/
public const EDITIONS = ['de', 'en'];
public const DEFAULT_EDITION = 'de';
public function handle(Request $request, Closure $next): Response
{
$segment = $request->segment(1);
$isEdition = in_array($segment, self::EDITIONS, true);
$edition = $isEdition ? $segment : self::DEFAULT_EDITION;
URL::defaults(['edition' => $edition]);
if ($isEdition) {
app()->setLocale($edition);
}
return $next($request);
}
}