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ě
|
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
|
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ší.
|
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 React from 'react'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
|
import { getPayload } from 'payload'
|
||||||
|
|
||||||
|
import config from '@/payload.config'
|
||||||
import './styles.css'
|
import './styles.css'
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
@@ -7,8 +10,22 @@ export const metadata = {
|
|||||||
title: 'Reiner — zbraně a střelivo',
|
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 }) {
|
export default async function RootLayout(props: { children: React.ReactNode }) {
|
||||||
const { children } = props
|
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 (
|
return (
|
||||||
<html lang="cs">
|
<html lang="cs">
|
||||||
@@ -19,7 +36,11 @@ export default async function RootLayout(props: { children: React.ReactNode }) {
|
|||||||
</Link>
|
</Link>
|
||||||
<nav>
|
<nav>
|
||||||
<Link href="/">Nabídka</Link>
|
<Link href="/">Nabídka</Link>
|
||||||
<Link href="/kontakt">Kontakt</Link>
|
{stranky.map((stranka) => (
|
||||||
|
<Link key={stranka.id} href={`/${stranka.slug}`}>
|
||||||
|
{stranka.nazev}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user