Beitragsnavigation als Baustein (Dokumentschema v18)
Umut: "Beitragsseite gefaellt mir nicht, sollte wie bei kant-it.de sein oder besser. Falls noetig Plugin bauen." Die Originalseite hat Galerie, Vor/Zurueck zwischen Projekten und einen Abschlussaufruf. Galerie und Aufruf gab es laengst - sie waren nur nicht benutzt. Die Navigation gab es nicht. Kein Plugin: ein Plugin ist hier ein Bausteintyp, dessen Eigenschaften der Kern aufbewahrt, aber nicht rendert - es koennte also nichts ausgeben, solange es keine Laufzeit dafuer gibt. Und die Nachbarn eines Beitrags stehen in derselben Tabelle wie die Beitragsliste, die der Kern schon fuellt. Also ein Baustein: postnav. Gespeichert sind zwei Beschriftungen, mehr nicht - welcher Beitrag vorher und nachher kommt, entscheidet der Renderer. Gesucht wird innerhalb derselben Kategorie, und am Rand wird nicht umgebrochen. Ausserdem: die uebernommenen Projekttexte begannen mit dem wiederholten Titel (20 Beitraege), und schmale Abschnitte standen links statt mittig - max-width ohne margin:auto ist eine halbe Einstellung. Geprueft: 396 Tests unter PHP 8.2 und 8.4, 18 JS-Tests, Editortest, Browserpruefung, axe ohne Verstoss auf der Beitragsseite. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5a5933f8cd
commit
1b22265a54
14 files changed
+148
-14
No files matched your search
@@ -717,6 +717,43 @@ final class CmsTest extends TestCase
|
||||
self::assertStringContainsString("'pointerdown', 'keydown', 'touchstart', 'wheel'", $skript);
|
||||
}
|
||||
|
||||
public function testAPostCanPointToItsNeighboursWithoutStoringThem(): void
|
||||
{
|
||||
// Die Beitragsseite endete bisher im Nichts: gelesen, und dann? Der neue Baustein führt
|
||||
// zum nächsten Beitrag - innerhalb derselben Kategorie, denn von einem Projekt führt man
|
||||
// zum nächsten Projekt und nicht zur nächsten Pressemitteilung.
|
||||
foreach ([['eins', '2026-02-01'], ['zwei', '2026-02-02'], ['drei', '2026-02-03']] as [$slug, $datum]) {
|
||||
$this->publishedPost('projekt-'.$slug, 'Projekt '.$slug, $datum, ['Projekte'], []);
|
||||
}
|
||||
$this->publishedPost('notiz', 'Eine Notiz', '2026-02-04', ['Notizen'], []);
|
||||
|
||||
$mitte = $this->db->fetchOne('SELECT id FROM page WHERE path = ?', ['projekt-zwei']);
|
||||
$document = DemoContent::starter('Projekt zwei', 'post');
|
||||
$document['schemaVersion'] = 18;
|
||||
$document['blocks'][] = ['id' => 'weiter', 'type' => 'postnav', 'props' => ['previousLabel' => 'Vorheriges Projekt', 'nextLabel' => 'Nächstes Projekt']];
|
||||
$this->pages->publish($mitte, $this->pages->saveDraft($mitte, $document, $this->pages->findForEditor($mitte)['version']), $this->pages->findForEditor($mitte)['version']);
|
||||
|
||||
$html = $this->request('/projekt-zwei')->getContent();
|
||||
// Neuer steht im Archiv oben, also ist „vorheriges" der neuere Beitrag.
|
||||
self::assertStringContainsString('Projekt drei', $html);
|
||||
self::assertStringContainsString('Projekt eins', $html);
|
||||
self::assertStringContainsString('Vorheriges Projekt', $html);
|
||||
// Die Notiz gehört in eine andere Kategorie und taucht nicht auf.
|
||||
self::assertStringNotContainsString('Eine Notiz', $html);
|
||||
|
||||
// Und im gespeicherten Dokument steht kein Beitrag - nur die Beschriftungen.
|
||||
$stored = $this->pages->findPublished('projekt-zwei')['document'];
|
||||
self::assertSame(['previousLabel' => 'Vorheriges Projekt', 'nextLabel' => 'Nächstes Projekt'], end($stored['blocks'])['props']);
|
||||
|
||||
// Am Rand wird nicht umgebrochen: der neueste Beitrag hat keinen Vorgänger.
|
||||
$neuestes = $this->db->fetchOne('SELECT id FROM page WHERE path = ?', ['projekt-drei']);
|
||||
$document['title'] = 'Projekt drei';
|
||||
$this->pages->publish($neuestes, $this->pages->saveDraft($neuestes, $document, $this->pages->findForEditor($neuestes)['version']), $this->pages->findForEditor($neuestes)['version']);
|
||||
$rand = $this->request('/projekt-drei')->getContent();
|
||||
self::assertStringNotContainsString('Vorheriges Projekt', $rand);
|
||||
self::assertStringContainsString('Nächstes Projekt', $rand);
|
||||
}
|
||||
|
||||
public function testAPostListCanPageThroughEverythingInsteadOfCuttingOff(): void
|
||||
{
|
||||
// Umut: „fehlt die Pagination bei Projekte? Es werden nur 12 angezeigt.“ Richtig: eine
|
||||
|
||||
Reference in new issue
Block a user