Weiterlesen ist ein Link, Menues teilen sich eine Abfrage
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

In der wechselseitigen Beitragsliste stand "Weiterlesen" als reine
Beschriftung da: sichtbar wie ein Knopf, aber nicht anklickbar. Jetzt
ein Link, mit dem Beitragstitel im Linktext fuer Vorlesesoftware.

Jedes Menue holte beim Aufloesen die vollstaendige Seitenliste selbst.
Mit zwei Menuen fiel das nicht auf, mit vier - Kopf, zwei Listen im
Fuss, Rechtszeile - waren es vier gleiche Abfragen je Seitenaufruf.
Einmal je Anfrage gemerkt: 21 -> 18 Abfragen auf der Startseite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
kantarciandClaude Opus 5 committed 2026-09-13 16:41:28 +02:00
1 parent 6c477a52be
commit 74766f6684
4 files changed
+27 -6

No files matched your search

+16 -4
View File
@@ -85,14 +85,26 @@ final class MenuRepository
*
* @return list<array{label: string, href: string, current: bool, children: list<array>}>
*/
/**
* Die Seitenliste, die jedes Menue zum Aufloesen braucht - einmal je Anfrage.
*
* Vorher holte jedes Menue sie selbst. Mit zwei Menuen fiel das nicht auf, mit vieren - Kopf,
* zwei Listen im Fuss und die Rechtszeile - waren es vier gleiche Abfragen je Seitenaufruf.
*
* @var array<string, array<string, mixed>>|null
*/
private ?array $pages = null;
public function resolve(array $items, string $currentPath, string $locale = 'de'): array
{
$pages = [];
foreach ($this->db->fetchAllAssociative('SELECT id, path, published_revision_id, draft_revision_id FROM page WHERE website_id = ? AND locale = ? AND deleted_at IS NULL', ['default', $locale]) as $page) {
$pages[$page['id']] = $page;
if (null === $this->pages) {
$this->pages = [];
foreach ($this->db->fetchAllAssociative('SELECT id, path, published_revision_id, draft_revision_id FROM page WHERE website_id = ? AND locale = ? AND deleted_at IS NULL', ['default', $locale]) as $page) {
$this->pages[$page['id']] = $page;
}
}
return $this->resolveLevel($items, $pages, $currentPath, $this->settings->homePath());
return $this->resolveLevel($items, $this->pages, $currentPath, $this->settings->homePath());
}
private function resolveLevel(array $items, array $pages, string $currentPath, string $homePath): array