diff --git a/src/lib/cms.ts b/src/lib/cms.ts index 846955a..f5304bb 100644 --- a/src/lib/cms.ts +++ b/src/lib/cms.ts @@ -163,14 +163,30 @@ export async function fetchOpenApi(): Promise { export async function getPages(): Promise { return cached("page", "page:list:", async () => { const base = getBaseUrl(); - const res = await cmsFetch(`${base}/api/content/page`); - if (!res.ok) { - throw new Error( - `RustyCMS list page failed: ${res.status}. Is the CMS running at ${base}?`, + // Alle Seiten holen — CMS-Default-per_page ist 50, die Site hat aber mehr. + // Ohne vollständige Liste scheitert der Slug→_slug-Fallback in + // getPageBySlug für Seiten jenseits der ersten Page → 404. + const PER_PAGE = 200; + const all: PageEntry[] = []; + let page = 1; + let totalPages = 1; + do { + const res = await cmsFetch( + `${base}/api/content/page?_per_page=${PER_PAGE}&_page=${page}`, ); - } - const data = (await res.json()) as PageListResponse; - return data.items ?? []; + if (!res.ok) { + throw new Error( + `RustyCMS list page failed: ${res.status}. Is the CMS running at ${base}?`, + ); + } + const data = (await res.json()) as PageListResponse & { + total_pages?: number; + }; + all.push(...(data.items ?? [])); + totalPages = data.total_pages ?? 1; + page += 1; + } while (page <= totalPages); + return all; }); }