fix(cms): getPages paginiert alle Seiten (Slug-Fallback fand Seiten jenseits per_page=50 nicht → 404)
This commit is contained in:
+19
-3
@@ -163,14 +163,30 @@ export async function fetchOpenApi(): Promise<OpenApiSpec> {
|
|||||||
export async function getPages(): Promise<PageEntry[]> {
|
export async function getPages(): Promise<PageEntry[]> {
|
||||||
return cached("page", "page:list:", async () => {
|
return cached("page", "page:list:", async () => {
|
||||||
const base = getBaseUrl();
|
const base = getBaseUrl();
|
||||||
const res = await cmsFetch(`${base}/api/content/page`);
|
// 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}`,
|
||||||
|
);
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`RustyCMS list page failed: ${res.status}. Is the CMS running at ${base}?`,
|
`RustyCMS list page failed: ${res.status}. Is the CMS running at ${base}?`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const data = (await res.json()) as PageListResponse;
|
const data = (await res.json()) as PageListResponse & {
|
||||||
return data.items ?? [];
|
total_pages?: number;
|
||||||
|
};
|
||||||
|
all.push(...(data.items ?? []));
|
||||||
|
totalPages = data.total_pages ?? 1;
|
||||||
|
page += 1;
|
||||||
|
} while (page <= totalPages);
|
||||||
|
return all;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user