Faire un bloc d'affichage personnalisé
Dans NocoBase, un bloc est une zone de contenu sur la page. Cet exemple montre comment créer un bloc personnalisé minimal avec BlockModel — il prend en charge l'édition de contenu HTML directement dans l'interface, l'utilisateur pouvant modifier le contenu affiché via le panneau de configuration.
C'est le premier exemple impliquant FlowEngine ; il fait intervenir BlockModel, renderComponent, registerFlow et uiSchema.
Il est conseillé de connaître les contenus suivants pour faciliter le développement :
- Écrire votre premier plugin — création d'un plugin et structure du répertoire
- Plugin — point d'entrée du plugin et cycle de vie
load() - Aperçu de FlowEngine — utilisation de base de FlowModel, renderComponent, registerFlow
- Internationalisation i18n — écriture des fichiers de traduction et utilisation de
tExpr()pour la traduction différée
Résultat final
Nous allons créer un bloc « Simple block » :
- Apparaît dans le menu « Ajouter un bloc »
- Affiche le contenu HTML configuré par l'utilisateur
- Permet à l'utilisateur d'éditer le HTML via le panneau de configuration (registerFlow + uiSchema)
Code source complet : @nocobase-example/plugin-simple-block. Pour le faire tourner directement en local :
Construisons ce plugin pas à pas, à partir de zéro.
Étape 1 : créer le squelette du plugin
À la racine du dépôt :
Cela génère la structure de fichiers de base sous packages/plugins/@my-project/plugin-simple-block. Voir Écrire votre premier plugin pour les détails.
Étape 2 : créer le modèle de bloc
Créez src/client-v2/models/SimpleBlockModel.tsx. C'est le cœur du plugin — il définit la façon dont le bloc s'affiche et se configure.
Quelques points clés :
renderComponent()— rend l'UI du bloc en lisantthis.props.htmldefine()— définit le nom affiché dans le menu « Ajouter un bloc ».tExpr()sert à la traduction différée cardefine()s'exécute au chargement du module, alors qu'i18n n'est pas encore initialiséregisterFlow()— ajoute un panneau de configuration.uiSchemadéfinit le formulaire avec JSON Schema (syntaxe : voir UI Schema),handlerécrit la valeur saisie par l'utilisateur dansctx.model.props, lue ensuite parrenderComponent()
Étape 3 : ajouter les fichiers de traduction
Modifiez les fichiers de traduction sous src/locale/ du plugin pour ajouter les clés utilisées par tExpr() :
L'ajout initial des fichiers de langue nécessite un redémarrage de l'application pour prendre effet.
Pour l'écriture des fichiers de traduction et plus d'utilisations de tExpr(), voir Internationalisation i18n.
Étape 4 : enregistrer dans le plugin
Modifiez src/client-v2/plugin.tsx et utilisez registerModelLoaders pour le chargement à la demande :
registerModelLoaders utilise l'import dynamique : le code du modèle ne se charge qu'à la première utilisation effective — c'est la méthode d'enregistrement recommandée.
Étape 5 : activer le plugin
Une fois activé, créez une nouvelle page, cliquez sur « Ajouter un bloc » et vous verrez « Simple block ». Après ajout, cliquez sur le bouton de configuration du bloc pour éditer le contenu HTML.
Code source complet
- @nocobase-example/plugin-simple-block — exemple complet de bloc d'affichage personnalisé
Récapitulatif
Capacités utilisées dans cet exemple :
Liens connexes
- Écrire votre premier plugin — créer le squelette d'un plugin de zéro
- Aperçu de FlowEngine — utilisation de base de FlowModel et registerFlow
- FlowEngine → Extension de bloc — BlockModel, DataBlockModel, CollectionBlockModel
- UI Schema — référence syntaxique uiSchema
- Component vs FlowModel — quand utiliser FlowModel
- Plugin — point d'entrée et cycle de vie load()
- Internationalisation i18n — écriture des fichiers de traduction et utilisation de tExpr
- Documentation complète FlowEngine — référence complète FlowModel, Flow, Context

