Matchcenter: „Nächste Spiele" als Band statt Autoplay-Slider
Der Bereich wirkte deplatziert: der Track war auf 620px begrenzt und zeigte eine Folie, wodurch die Karte auf breiten Fenstern in ~840px Totraum schwebte; dazu derselbe Hintergrund wie der Hero direkt darüber, kein Akzent, und ein einsames „:" zwischen den Wappen, das wie ein fehlendes Ergebnis aussah. Neu als abgesetztes Band (.section--sunken, nutzt endlich das dafür vorgesehene, bisher unbenutzte Token --clr-bg-deep) mit roter Oberkante: links der Aufmacher (match-feature), rechts die folgenden Termine als verlinkte match-row-Zeilen ohne Kartenfläche. Der Aufmacher ist die große Variante der Terminzeile — Heim über Gast, linksbündig, gleiche Struktur wie die Zeilen daneben. Bewusst nur drei typografische Rollen (Meta-Zeile · Vereinsnamen in Coolvetica · Anstoßzeile mit Countdown) statt der acht der ersten Fassung, ohne Badges, Icons oder Button. Die eigene Mannschaft wird über Helligkeit markiert, nicht über font-weight — Coolvetica hat nur einen Schnitt, bold wäre synthetisch. match-row bekommt optionale $href/$meta-Props; Raster und Innenabstand liegen jetzt im __link-Wrapper, damit als Link die ganze Zeilenfläche klickbar ist. Neue Helper match_when() (ISO + deutscher Countdown, explizit Europe/Berlin, weil PHP global auf UTC läuft) und match_competition_label(). match-slider.php und match-card.php entfallen — Letztere wurde ausschließlich vom Slider genutzt. carousel.js treibt damit nur noch den Banner-Slider der Startseite und wird im Matchcenter nicht mehr geladen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
61
app/components/next-matches.php
Normal file
61
app/components/next-matches.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* „Nächste Spiele"-Band (teamübergreifend): abgesetzte dunklere Fläche mit roter
|
||||
* Oberkante, links der Aufmacher (das zeitlich nächste Spiel aller Mannschaften),
|
||||
* rechts die folgenden Termine als kompakte, anklickbare Zeilen. Props:
|
||||
* $matches data/matchcenter.json → upcoming[] (chronologisch)
|
||||
* $teams data/matchcenter.json → teams[] (liefert Liganame + Sprungmarke)
|
||||
* Leer → nichts rendern.
|
||||
*/
|
||||
$matches = $matches ?? [];
|
||||
$teams = $teams ?? [];
|
||||
if ($matches === []) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Liganame und Sprungmarke je Mannschaft vorbereiten, damit die Karten nicht
|
||||
// selbst in den Teams suchen müssen. Anker wie in matchcenter-section.php.
|
||||
$leagues = [];
|
||||
$anchors = [];
|
||||
foreach ($teams as $t) {
|
||||
$key = (string) ($t['key'] ?? '');
|
||||
if ($key === '') {
|
||||
continue;
|
||||
}
|
||||
$leagues[$key] = (string) ($t['league'] ?? '');
|
||||
$anchors[$key] = '#team-' . preg_replace('/[^a-z0-9-]+/', '', strtolower($key));
|
||||
}
|
||||
|
||||
$feature = array_shift($matches);
|
||||
$featureKey = (string) ($feature['team_key'] ?? '');
|
||||
?>
|
||||
<section class="section section--sunken next-matches" id="naechste-spiele">
|
||||
<div class="container">
|
||||
<h2 class="next-matches__title">Nächste Spiele</h2>
|
||||
<div class="next-matches__grid">
|
||||
<?php component('match-feature', [
|
||||
'match' => $feature,
|
||||
'team_name' => $feature['team_name'] ?? '',
|
||||
'league' => $leagues[$featureKey] ?? '',
|
||||
'href' => $anchors[$featureKey] ?? null,
|
||||
]); ?>
|
||||
<?php if ($matches !== []): ?>
|
||||
<div class="next-matches__list">
|
||||
<h3 class="next-matches__list-title">Danach</h3>
|
||||
<ul class="match-list match-list--plain">
|
||||
<?php foreach ($matches as $m): ?>
|
||||
<?php component('match-row', [
|
||||
'match' => $m,
|
||||
'meta' => $m['team_name'] ?? '',
|
||||
'href' => $anchors[(string) ($m['team_key'] ?? '')] ?? null,
|
||||
]); ?>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
Reference in New Issue
Block a user