Skládat navigaci z kolekce Pages
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:
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user