From 2715d329efb7701bcdf76e80b68166d8162707b0 Mon Sep 17 00:00:00 2001 From: Umut Kantarci Date: Sun, 13 Sep 2026 09:19:22 +0200 Subject: [PATCH] Beitragskopf mit Bild, und die Metazeile laesst sich abschalten Umut meinte den Kopf beim Oeffnen eines Beitrags. Im Original fuellt dort das Projektbild den Kopf, darueber ein Verlauf mit Badge, Titel und einer kurzen Akzentlinie - der Text mittig. Nachgebaut ohne neue Funktion, aus Hintergrundbild, Verlauf und Flexausrichtung. Dabei stand die Zeile mit Datum, Autor und Kategorie ueber dem Bild und wiederholte, was der Titel darin schon sagt. Neue Einstellung "Datum, Autor und Kategorie ueber einem Beitrag zeigen", Voreinstellung an. Geprueft: 391 Tests unter PHP 8.2 und 8.4, Editortest, Browserpruefung, axe ohne Verstoss auf dem Beitrag. Co-Authored-By: Claude Opus 5 --- docs/ARCHITECTURE.md | 2 ++ src/Content/SiteSettings.php | 4 ++++ templates/admin/settings.html.twig | 1 + templates/page.html.twig | 2 +- tests/CmsTest.php | 8 ++++++++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index a6d3c08..92ba1fb 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -458,6 +458,8 @@ Umut: „es gibt keinen Mausover-Effekt wenn man auf einen Beitrag geht, das feh **Nebenbei entfernt:** der Leuchteffekt (`fx-hover-glow`) trug noch das Grün der Vorlage statt der Akzentfarbe der Website. +**Nachgetragen am 13.09.2026:** Umut meinte den Kopf **beim Öffnen eines Beitrags**, nicht den der Startseite. Im Original füllt dort das Projektbild den ganzen Kopf (75 vh), darüber liegt ein Verlauf von fast durchsichtig oben nach fast deckend unten, und darin stehen ein Badge in der Akzentfarbe, der Titel und eine 60 × 4 Pixel kurze Linie. Nachgebaut mit den vorhandenen Mitteln – Hintergrundbild, Verlauf, Flexausrichtung –, der Text mittig gesetzt. Dabei fiel auf, dass die Zeile mit Datum, Autor und Kategorie oberhalb davon stand: bei einem Beitrag, der seinen Titel im Bild trägt, ist sie doppelt. Sie ist jetzt abschaltbar (`postMetaHeader`), Voreinstellung bleibt an. + ## ADR 044 – Genauer hinsehen: Punkte statt Rollleiste, Karten statt Zeilen (13.09.2026) Umut hat den Nachbau Detail für Detail mit dem Original verglichen, und er hatte in jedem Punkt recht. Was dabei herauskam, sind nicht Geschmacksfragen, sondern vier Stellen, an denen das CMS etwas nicht konnte oder etwas Falsches tat. diff --git a/src/Content/SiteSettings.php b/src/Content/SiteSettings.php index 8767ea7..c8d2c26 100644 --- a/src/Content/SiteSettings.php +++ b/src/Content/SiteSettings.php @@ -27,6 +27,9 @@ final class SiteSettings // Der Kopfbereich bleibt beim Scrollen oben stehen. Eine Eigenschaft der Website und // nicht des Dokuments: kleben kann nur das Element, das den Bereich umschliesst. 'stickyHeader' => false, + // Datum, Autor und Kategorie über dem Beitrag. Aus, wenn der Beitrag seinen eigenen + // Kopf mitbringt - sonst steht die Zeile über einem Bild, das den Titel schon trägt. + 'postMetaHeader' => true, 'robotsExtra' => '', // Which stored page answers at the site root. Everything else derives from this. 'homePath' => 'home', @@ -97,6 +100,7 @@ final class SiteSettings } $values['llmsTxt'] = (bool) ($input['llmsTxt'] ?? false); $values['stickyHeader'] = (bool) ($input['stickyHeader'] ?? false); + $values['postMetaHeader'] = (bool) ($input['postMetaHeader'] ?? false); // Only comment and simple directive lines; nothing that could smuggle in a second policy. $extra = []; foreach (preg_split('/\R/', (string) ($input['robotsExtra'] ?? '')) ?: [] as $line) { diff --git a/templates/admin/settings.html.twig b/templates/admin/settings.html.twig index 0b3b781..0e7d007 100644 --- a/templates/admin/settings.html.twig +++ b/templates/admin/settings.html.twig @@ -74,6 +74,7 @@

Nur Kommentarzeilen und einfache Anweisungen wie Disallow: /pfad. Höchstens dreißig Zeilen.

Einwilligung

Nur nötig, wenn die Website etwas von Dritten lädt
+

Ohne eingebettete Inhalte anderer Anbieter braucht diese Website keine Einwilligung – dann ist ein Banner nur im Weg und sollte aus bleiben. Eingebettete Inhalte laden ohnehin erst nach Zustimmung, unabhängig von diesem Schalter.

diff --git a/templates/page.html.twig b/templates/page.html.twig index c1aeb73..252b85a 100644 --- a/templates/page.html.twig +++ b/templates/page.html.twig @@ -44,7 +44,7 @@ {% endif %}
- {% if postMeta is defined and postMeta is not null %} + {% if postMeta is defined and postMeta is not null and siteSettings.load().postMetaHeader %}

{% if page.published_at %}{% endif %} {% if page.author %}von {{ page.author }}{% endif %} diff --git a/tests/CmsTest.php b/tests/CmsTest.php index 64e1444..a04e457 100644 --- a/tests/CmsTest.php +++ b/tests/CmsTest.php @@ -643,6 +643,14 @@ final class CmsTest extends TestCase self::assertStringContainsString('', $html); self::assertStringContainsString('alt="Firmenlogo"', $html); + // Datum, Autor und Kategorie über einem Beitrag lassen sich abschalten - ein Beitrag mit + // eigenem Kopfbild trägt den Titel schon, und die Zeile darüber steht dann im Weg. + $this->publishedPost('projekt', 'Ein Projekt', '2026-02-01', ['Projekte'], []); + self::assertStringContainsString('post-header', $this->request('/projekt')->getContent()); + $vorher = $this->site->load(); + $this->site->save([...$vorher, 'postMetaHeader' => false, 'sameAs' => '', 'consentGroups' => $vorher['consentGroups']]); + self::assertStringNotContainsString('post-header', $this->request('/projekt')->getContent()); + // Der Kopfbereich klebt erst, wenn die Einstellung es sagt. self::assertStringContainsString('class="site-header"', $html); $settings = $this->site->load();