Erweitern & Sicherheit
Eigene & buchbare Blöcke
Zusätzliche Blöcke kommen als Pakete (Plugins) hinzu und registrieren sich über die API:
export default function register(cms) {
cms.addBlock({
type: 'pricing',
title: 'Preistabelle',
category: 'design',
scope: ['home'],
css: '.pricing{ … }',
render: (props, node, ctx) => `<section class="pricing">…</section>`,
});
}
Der render-Callback erhält die Eigenschaften, den Block-Knoten und einen Kontext (u. a. ctx.e zum Maskieren, ctx.renderChildren). Ein Paket kann lizenzpflichtig sein und ohne gültige Lizenz einen Sperr-Platzhalter zeigen; der Schlüssel wird unter Design → Buchbare Block-Pakete eingetragen.
Sicherheit & SEO
- HeroML ist Daten, kein Code: der Parser baut nur einen Objekt-Baum — es wird nichts ausgeführt.
- Block-Renderer maskieren jeden Wert. Roh-HTML gibt es nur über
html/richtextund wird per Allowlist bereinigt. - Der
<head>(Titel, Meta, Open Graph, Twitter, JSON-LD, Favicon) wird zentral erzeugt; Blöcke können eigene JSON-LD-Strukturdaten beisteuern. - Ausgegeben wird server-gerendertes, semantisches HTML;
sitemap.xmlundrobots.txtbleiben unverändert.
Spickzettel
# Kommentar Einrückung: 2 Leerzeichen typ attr=wert attr2="zwei worte" flag # Block-Zeile schlüssel: wert # Feld-Zeile kind-block # tiefer = Kind grid cols=3 · cell span=2 # Raster with-sidebar side=right · sidebar sticky # Sidebar featured # Highlight 50/25/25 posts layout=grid excerpt=20 mode=loadmore recent-posts count=5 · category-list # dynamische Widgets ad slot=header format=leaderboard # Werbeplatz meta / animate=fade-up / {{ site.title }}