Scaffold webu na Payload CMS 3 + Next.js nad SQLite
Kostra prezentace s vlastní administrací pro Martina Reinera. Obsah: - kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí), Media se zmenšeninami, Pages, Users bez veřejné registrace - veřejná část: výpis nabídky, detail položky, statické stránky - /api/health pro Docker HEALTHCHECK Provoz: - Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml (nasazení z Gitea registry) - CI v Gitea Actions: lint -> testy -> build -> push image - úvodní migrace databáze Stránky jsou force-dynamic, aby se úprava položky projevila hned; schéma se za běhu nedomýšlí (push: false), migrace se commitují. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import { notFound } from 'next/navigation'
|
||||
import { getPayload } from 'payload'
|
||||
import React from 'react'
|
||||
import { RichText } from '@payloadcms/richtext-lexical/react'
|
||||
|
||||
import config from '@/payload.config'
|
||||
import type { Page } from '@/payload-types'
|
||||
import '../styles.css'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
type Props = { params: Promise<{ slug: string }> }
|
||||
|
||||
export async function generateMetadata({ params }: Props) {
|
||||
const stranka = await najdiStranku((await params).slug)
|
||||
return { title: stranka ? `${stranka.nazev} — Reiner zbraně` : 'Stránka nenalezena' }
|
||||
}
|
||||
|
||||
/** Statické stránky z kolekce Pages — /kontakt, /o-nas a podobně. */
|
||||
export default async function StatickaStranka({ params }: Props) {
|
||||
const stranka = await najdiStranku((await params).slug)
|
||||
if (!stranka) notFound()
|
||||
|
||||
return (
|
||||
<article className="stranka">
|
||||
<h1>{stranka.nazev}</h1>
|
||||
{stranka.obsah && <RichText data={stranka.obsah} />}
|
||||
</article>
|
||||
)
|
||||
}
|
||||
|
||||
async function najdiStranku(slug: string): Promise<Page | null> {
|
||||
const payload = await getPayload({ config: await config })
|
||||
|
||||
const { docs } = await payload.find({
|
||||
collection: 'pages',
|
||||
where: { slug: { equals: slug } },
|
||||
limit: 1,
|
||||
})
|
||||
|
||||
return docs[0] ?? null
|
||||
}
|
||||
Reference in New Issue
Block a user