Einen benutzerdefinierten Anzeige-Block erstellen
In NocoBase ist ein Block ein Inhaltsbereich auf einer Seite. Dieses Beispiel zeigt, wie Sie mit BlockModel einen einfachen benutzerdefinierten Block erstellen — er unterstützt das Bearbeiten von HTML-Inhalt in der Oberfläche, Benutzer können den angezeigten Inhalt über das Konfigurationspanel ändern.
Dies ist das erste Beispiel, das die FlowEngine einbezieht, und nutzt BlockModel, renderComponent, registerFlow und uiSchema.
Es empfiehlt sich, zunächst Folgendes zu kennen, damit die Entwicklung reibungsloser verläuft:
- Erstes Plugin schreiben — Plugin-Erstellung und Verzeichnisstruktur
- Plugin — Plugin-Einstiegspunkt und
load()-Lebenszyklus - FlowEngine-Übersicht — Grundlegende Verwendung von FlowModel, renderComponent, registerFlow
- i18n Internationalisierung — Schreibweise von Übersetzungsdateien und verzögerte Übersetzung mit
tExpr()
Endergebnis
Wir erstellen einen Block „Simple block":
- erscheint im Menü „Block hinzufügen"
- rendert vom Benutzer konfigurierten HTML-Inhalt
- über Konfigurationspanel (registerFlow + uiSchema) lassen sich HTML-Inhalte bearbeiten
Vollständigen Quellcode siehe @nocobase-example/plugin-simple-block. Wenn Sie es lokal ausprobieren möchten:
Im Folgenden bauen wir dieses Plugin Schritt für Schritt von Grund auf auf.
Schritt 1: Plugin-Gerüst erstellen
Im Stammverzeichnis des Repositories ausführen:
Dies erzeugt unter packages/plugins/@my-project/plugin-simple-block die Grundstruktur. Detaillierte Erläuterungen siehe Erstes Plugin schreiben.
Schritt 2: Block-Modell erstellen
Erstellen Sie src/client-v2/models/SimpleBlockModel.tsx. Das ist der Kern des Plugins — hier wird definiert, wie der Block gerendert und konfiguriert wird.
Wichtige Punkte:
renderComponent()— rendert die Block-UI, liest den HTML-Inhalt überthis.props.htmldefine()— legt den im Menü „Block hinzufügen" angezeigten Namen fest.tExpr()dient zur verzögerten Übersetzung, denndefine()wird beim Laden des Moduls ausgeführt, zu diesem Zeitpunkt ist i18n noch nicht initialisiertregisterFlow()— fügt das Konfigurationspanel hinzu.uiSchemadefiniert das Formular im JSON-Schema-Format (Syntax siehe UI Schema),handlerschreibt den vom Benutzer ausgefüllten Wert inctx.model.props, sodassrenderComponent()ihn lesen kann
Schritt 3: Mehrsprachen-Dateien hinzufügen
Bearbeiten Sie die Übersetzungsdateien unter src/locale/ des Plugins und ergänzen Sie alle in tExpr() verwendeten Schlüssel mit Übersetzungen:
Beim erstmaligen Hinzufügen einer Sprachdatei muss die Anwendung neu gestartet werden, damit sie wirksam wird.
Mehr zur Schreibweise von Übersetzungsdateien und zur Verwendung von tExpr() siehe i18n Internationalisierung.
Schritt 4: Im Plugin registrieren
Bearbeiten Sie src/client-v2/plugin.tsx und laden Sie das Modell per Lazy Loading mit registerModelLoaders:
registerModelLoaders verwendet dynamische Imports, sodass der Modell-Code erst beim ersten tatsächlichen Verwenden geladen wird — die empfohlene Registrierungsweise.
Schritt 5: Plugin aktivieren
Nach der Aktivierung legen Sie eine neue Seite an, klicken auf „Block hinzufügen" und sehen den „Simple block". Nach dem Hinzufügen können Sie über den Konfigurations-Button des Blocks den HTML-Inhalt bearbeiten.
Vollständiger Quellcode
- @nocobase-example/plugin-simple-block — Vollständiges Beispiel eines benutzerdefinierten Anzeige-Blocks
Zusammenfassung
In diesem Beispiel verwendete Fähigkeiten:
Verwandte Links
- Erstes Plugin schreiben — Plugin-Gerüst von Grund auf erstellen
- FlowEngine-Übersicht — Grundlegende Verwendung von FlowModel und registerFlow
- FlowEngine → Block-Erweiterung — BlockModel, DataBlockModel, CollectionBlockModel
- UI Schema — uiSchema-Syntaxreferenz
- Component vs FlowModel — Wann FlowModel verwenden
- Plugin — Plugin-Einstiegspunkt und load()-Lebenszyklus
- i18n Internationalisierung — Schreibweise von Übersetzungsdateien und Verwendung von tExpr
- Vollständige FlowEngine-Dokumentation — Vollständige Referenz zu FlowModel, Flow, Context

