Beitragskopf mit Bild, und die Metazeile laesst sich abschalten
CMS quality / php (8.2) (push) Canceled after 0s
CMS quality / php (8.4) (push) Canceled after 0s
CMS quality / browser (push) Canceled after 0s
CMS quality / mysql (push) Canceled after 0s

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 <noreply@anthropic.com>
This commit is contained in:
kantarciandClaude Opus 5 committed 2026-09-13 09:19:22 +02:00
1 parent 1b164f4c86
commit 2715d329ef
5 files changed
+16 -1

No files matched your search

+2
View File
@@ -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.
+4
View File
@@ -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) {
+1
View File
@@ -74,6 +74,7 @@
<p class="field-help">Nur Kommentarzeilen und einfache Anweisungen wie <code>Disallow: /pfad</code>. Höchstens dreißig Zeilen.</p>
<div class="section-head"><h2>Einwilligung</h2><span class="muted">Nur nötig, wenn die Website etwas von Dritten lädt</span></div>
<label class="check-label" for="stickyHeader"><input id="stickyHeader" name="stickyHeader" type="checkbox" value="1"{{ settings.stickyHeader ? ' checked' : '' }}> Kopfbereich beim Scrollen oben halten</label>
<label class="check-label" for="postMetaHeader"><input id="postMetaHeader" name="postMetaHeader" type="checkbox" value="1"{{ settings.postMetaHeader ? ' checked' : '' }}> Datum, Autor und Kategorie über einem Beitrag zeigen</label>
<label class="check-label" for="consentBanner"><input id="consentBanner" name="consentBanner" type="checkbox" value="1"{{ settings.consentBanner ? ' checked' : '' }}> Einwilligungshinweis anzeigen</label>
<p class="field-help">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.</p>
<fieldset class="field-set">
+1 -1
View File
@@ -44,7 +44,7 @@
</header>
{% endif %}
<main id="main" tabindex="-1">
{% if postMeta is defined and postMeta is not null %}
{% if postMeta is defined and postMeta is not null and siteSettings.load().postMetaHeader %}
<p class="post-header shell">
{% if page.published_at %}<time datetime="{{ page.published_at|date('Y-m-d') }}">{{ page.published_at|date('d.m.Y') }}</time>{% endif %}
{% if page.author %}<span>von {{ page.author }}</span>{% endif %}
+8
View File
@@ -643,6 +643,14 @@ final class CmsTest extends TestCase
self::assertStringContainsString('<a class="image-link" href="/">', $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();