Создание пользовательского блока отображения
В NocoBase блок — это область содержимого на странице. Этот пример показывает, как с помощью BlockModel создать простейший пользовательский блок — поддерживающий редактирование HTML-содержимого в интерфейсе. Пользователь может через панель конфигурации изменять отображаемое содержимое блока.
Это первый пример, затрагивающий FlowEngine — будут использованы BlockModel, renderComponent, registerFlow и uiSchema.
Рекомендуется сначала ознакомиться со следующим — это упростит разработку:
- Написание первого плагина — создание плагина и структура каталогов
- Plugin (Плагин) — точка входа плагина и жизненный цикл
load() - Обзор FlowEngine — FlowModel, renderComponent, базовое использование registerFlow
- i18n Интернационализация — формат файлов перевода и использование
tExpr()для отложенного перевода
Конечный результат
Мы делаем блок «Simple block»:
- Появляется в меню «Добавить блок»
- Рендерит сконфигурированное пользователем HTML-содержимое
- Через панель конфигурации (registerFlow + uiSchema) позволяет пользователю редактировать HTML
Полный исходный код см. в @nocobase-example/plugin-simple-block. Если хотите запустить и посмотреть локально:
Ниже шаг за шагом построим этот плагин с нуля.
Шаг 1: создать каркас плагина
Выполните в корне репозитория:
Это сгенерирует базовую файловую структуру в packages/plugins/@my-project/plugin-simple-block. Подробное описание см. в Написание первого плагина.
Шаг 2: создать модель блока
Создайте src/client-v2/models/SimpleBlockModel.tsx. Это ядро плагина — здесь определяется, как блок рендерится и как настраивается.
Несколько ключевых моментов:
renderComponent()— рендеринг UI блока, чтение HTML-содержимого черезthis.props.htmldefine()— установка отображаемого имени блока в меню «Добавить блок».tExpr()используется для отложенного перевода, потому чтоdefine()выполняется на этапе загрузки модуля, и в этот момент i18n ещё не инициализированregisterFlow()— добавление панели конфигурации.uiSchemaопределяет форму через JSON Schema (синтаксис см. в UI Schema),handlerзаписывает значения, заполненные пользователем, вctx.model.props, аrenderComponent()их читает
Шаг 3: добавить файлы локализации
Отредактируйте файлы перевода в src/locale/ плагина, добавьте переводы для всех ключей, использованных в tExpr():
При первом добавлении файла языка нужно перезапустить приложение, чтобы он вступил в силу.
О формате файлов перевода и других способах использования tExpr() подробнее см. в i18n Интернационализация.
Шаг 4: зарегистрировать в плагине
Отредактируйте src/client-v2/plugin.tsx, через registerModelLoaders подгружайте модель по требованию:
registerModelLoaders использует динамический импорт — код модели загружается только при первом обращении. Это рекомендуемый способ регистрации.
Шаг 5: включить плагин
После включения создайте новую страницу, нажмите «Добавить блок» — Вы увидите «Simple block». После добавления нажмите кнопку настройки блока, чтобы редактировать HTML-содержимое.
Полный исходный код
- @nocobase-example/plugin-simple-block — полный пример пользовательского блока отображения
Резюме
Возможности, использованные в этом примере:
Связанные ссылки
- Написание первого плагина — создание каркаса плагина с нуля
- Обзор FlowEngine — базовое использование FlowModel и registerFlow
- FlowEngine → Расширение блоков — BlockModel, DataBlockModel, CollectionBlockModel
- UI Schema — справочник синтаксиса uiSchema
- Component vs FlowModel — когда использовать FlowModel
- Plugin (Плагин) — точка входа плагина и жизненный цикл load()
- i18n Интернационализация — формат файлов перевода и использование tExpr
- Полная документация FlowEngine — полный справочник FlowModel, Flow, Context

