Entwicklerportal
Templates

Darstellung

Render-Eingaben, eigene Navigation mit SDK-Hilfen, Theme-Tokens, Dunkelmodus und Barrierefreiheit.

Render-Eingaben

Die Render-Funktion bekommt TemplateRenderProps aus dem SDK:

EingabeInhalt
siteName, Branding (brandName, tagline), Theme-Tokens (u. a. logoUrl), Art und Rolle der Website
menusMenüs je Region, bereits nach Sichtbarkeit gefiltert
mainBlocksBlöcke der Region main
renderBlockBlock-Renderer der Plattform – für jeden Block aufrufen, Reihenfolge nicht ändern
currentPathaktueller Pfad (aktive Navigation)
pageSeitentitel und Eltern-Seiten (Brotkrumen)
settingsgeprüfte Einstellungen mit Defaults
src/frontend/index.ts
import { defineWebTemplate, type WebTemplate } from "@patriotconnect/template-sdk";
import { meinTemplateManifest } from "../shared/manifest.js";
import { MeinTemplate } from "./mein-template-template.js";

export const webTemplate: WebTemplate = defineWebTemplate(meinTemplateManifest, MeinTemplate);

Prüfen Sie die Einstellungen in der Render-Funktion defensiv erneut (safeParse, bei Fehler Defaults) – eine Render-Funktion wirft nie.

Navigation und Footer gehören dem Template. Das SDK liefert die Regeln dahinter:

HilfeZweck
isMenuItemActive(item, currentPath)aktive Seite – als aria-current="page" ausgeben
menuItemRel(item)sicheres rel für neue Tabs (noopener noreferrer)
linkableMenuItems(menu)verlinkbare Einträge ohne Trenner und Überschriften
safeInternalPath(path)nur interne Pfade verlinken (Brotkrumen, kein Open Redirect)
consentSettingsHref(menus), CONSENT_OPEN_ATTRIBUTE, CONSENT_SETTINGS_LABELPflicht-Link „Datenschutz-Einstellungen“ im Footer
<a href={consentSettingsHref(menus)} {...{ [CONSENT_OPEN_ATTRIBUTE]: "" }} className="underline">
  {CONSENT_SETTINGS_LABEL}
</a>

Der Link „Datenschutz-Einstellungen“ ist immer vorhanden (ADR-0098): Über das Attribut data-pc-consent-open öffnet die Plattform die Einwilligungs-Verwaltung; ohne JavaScript führt er zur Datenschutz-Seite.

Theme und Dunkelmodus

Jede Website hat ein Theme (Farben, Logos, Schriften als Tokens), das an untergeordnete Gliederungen vererbt wird. Ein Template nutzt nur diese Tokens:

ZweckKlassen
Flächenbg-section-white, bg-section-gray, bg-section-dark
Schrifttext-neutral-900 … text-neutral-500, font-title, font-sans
Akzentebrand-*, cta-* (z. B. border-brand-600)

Nie feste Farben wie bg-white, text-black oder [#hex]: Im Dunkelmodus kippt die Plattform die Tokens, feste Farben ergäben hell auf hell. Varianten stehen als vollständige Klassen in Tabellen im Quelltext – Tailwind erzeugt nur, was dort ausgeschrieben steht.

Hell, 390 pxDunkel, 390 px
Beispiel-Template hell, 390 pxBeispiel-Template dunkel, 390 px

Beispiel-Template dunkel, 1280 px

Barrierefreiheit (WCAG 2.1 AA)

  1. Genau ein <main id="main-content"> – Sprungziel des Skip-Links.
  2. Genau eine H1. Gibt das Template den Seitentitel aus, setzt es rendersTitleH1: true im Manifest.
  3. Jede Navigation hat einen Namen (aria-label).
  4. Lesereihenfolge = Dokumentreihenfolge – kein Umsortieren per CSS (order, grid-flow-dense).

Dazu: sichtbarer Fokus (focus-visible:ring-*), Bilder mit alt, Kontrast aus den Theme-Tokens.

On this page