FR
Traduction bêta

@core / kit-cms

1.0.1 ▾
vérifiéMIT
GitHub

Kit de site autogéré pour Next.js : /admin pour éditer pages à blocs, médias, menus, réglages, formulaires, comptes

Code38 fichiersContexte~1,8 k tokensanalyse réussie

L’arborescence exacte qui sera injectée, après .genpmignore. Épinglée à

src/app/(cms)/_templates/layout.tsxlecture seule · bb5d8e0
// Plantilla del layout raíz para un sitio NUEVO: cópiala a `src/app/layout.tsx` (en un sitio existente, añade solo lo que falte).
// Cabecera y pie salen de los menús `header` / `footer` y del nombre del sitio editados en el admin.
import type { Metadata } from 'next';
import Link from 'next/link';
import type { ReactNode } from 'react';
import '@/lib/ui/ui.css';
import '@/lib/blocks/blocks.css';
import { getMenu, getSiteSettings, type MenuItem } from '@/lib/site';

// Lee menús y ajustes de la base de datos en cada petición: sin esto, `next build` intenta prerenderizar y necesita la BD.
export const dynamic = 'force-dynamic';

export async function generateMetadata(): Promise<Metadata> {
  const s = await getSiteSettings();
  return { title: { default: s?.name ?? 'Site', template: `%s · ${s?.name ?? 'Site'}` }, ...(s?.tagline && { description: s.tagline }) };
}

function Menu({ items, label }: { items: MenuItem[]; label: string }) {
  if (!items.length) return null;
  return (
    <nav aria-label={label}>
      <ul>
        {items.map((i) => (
          <li key={`${i.href}-${i.label}`}>
            <Link href={i.href} {...(i.newTab && { target: '_blank', rel: 'noopener noreferrer' })}>
              {i.label}
            </Link>
            {i.children?.length ? <Menu items={i.children} label={i.label} /> : null}
          </li>
        ))}
      </ul>
    </nav>
  );
}

export default async function RootLayout({ children }: { children: ReactNode }) {
  const [settings, header, footer] = await Promise.all([getSiteSettings(), getMenu('header'), getMenu('footer')]);
  return (
    <html lang="en">
      <body className="ui-root">
        <header className="site-chrome">
          <Link href="/">{settings?.name ?? 'Site'}</Link>
          <Menu items={header} label="Main" />
        </header>
        {children}
        <footer className="site-chrome">
          <Menu items={footer} label="Footer" />
        </footer>
      </body>
    </html>
  );
}

Signaler @core/kit-cms

Connectez-vous avec GitHub pour signaler un paquet.