Skládat navigaci z kolekce Pages
CI / test (push) Successful in 1m0s
CI / build-and-push (push) Successful in 2m20s

Menu bylo napsané natvrdo a odkazovalo na /kontakt bez ohledu na to,
jestli stránka s tím slugem existuje — odtud 404. Stránky založené
v administraci se naopak neobjevily nikde.

Hlavička teď vypisuje stránky z kolekce, řazené podle názvu. Layout
kvůli tomu musí být force-dynamic, jinak by se při buildu předgenerovala
stránka 404, která tenhle layout používá taky, a build by sáhl do
databáze.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 17:00:48 +02:00
co-authored by Claude Opus 5
parent 1c51034031
commit 57f367c219
2 changed files with 25 additions and 1 deletions
+3
View File
@@ -32,3 +32,6 @@ verzování [sémantické](https://semver.org/lang/cs/).
odmítne s HTTP 400 „url parameter is not allowed". Do `next/image` se nově
posílá jen cesta — soubor leží na stejném originu a stejný image tak funguje
na stagingu i v produkci, kde se domény liší.
- Stránky založené v administraci se nikde neobjevily. Navigace byla napsaná
natvrdo a odkazovala na `/kontakt`, i když stránka s tím slugem nemusela
existovat (odtud 404). Menu se teď skládá z kolekce Pages.
+22 -1
View File
@@ -1,5 +1,8 @@
import React from 'react'
import Link from 'next/link'
import { getPayload } from 'payload'
import config from '@/payload.config'
import './styles.css'
export const metadata = {
@@ -7,8 +10,22 @@ export const metadata = {
title: 'Reiner — zbraně a střelivo',
}
// Menu se skládá z obsahu, takže se nesmí předgenerovat při buildu.
// Platí i pro stránku 404, která tenhle layout používá také.
export const dynamic = 'force-dynamic'
export default async function RootLayout(props: { children: React.ReactNode }) {
const { children } = props
const payload = await getPayload({ config: await config })
// Do menu se propíše každá stránka založená v administraci — natvrdo psaný
// odkaz by mířil na něco, co majitel ještě nevytvořil, nebo pojmenoval jinak.
const { docs: stranky } = await payload.find({
collection: 'pages',
sort: 'nazev',
depth: 0,
limit: 20,
})
return (
<html lang="cs">
@@ -19,7 +36,11 @@ export default async function RootLayout(props: { children: React.ReactNode }) {
</Link>
<nav>
<Link href="/">Nabídka</Link>
<Link href="/kontakt">Kontakt</Link>
{stranky.map((stranka) => (
<Link key={stranka.id} href={`/${stranka.slug}`}>
{stranka.nazev}
</Link>
))}
</nav>
</header>