Plugins
在 plugin.yaml 中配置 settingName 和 configMapName 字段: 对应到extensions/setting.yaml 在 Halo 通知系统中,ReasonType 和 Reason 是两个核心自定义模型,用于定义通知事件的类别和具体的事件实例。 理解它们的字段对于开发者扩展通知功能至关重要。 主题模板中使用自定义模型时, 创建一个自定义的 finder 来实现 为插件创建一个模板,要提供一个路由用于渲染这个模板 从 Halo 2.15.0 版本开始,核心提供了 WebSocketEndpoint 接口,其主要目的是为了方便插件实现 WebSocket 功能。 登录增强器 Halo 提供了一个 LoginHandlerEnhancer 的 Bean,插件可以通过依赖注入的方式在合适的位置调用该 Bean 的方法,以便 Halo 可以在登录成功或失败后执行逻辑切入。 插件中外部静态资源如图片, 首先需要在 src/main/resources/extensions 下创建一个 yaml,文件名可以任意。 声明 ReverseProxy 对象如下: apiVersion: plugin.halo.run/v1alpha1 kind: ReverseProxy metadata: # 为了避免与其他插件冲突,推荐带上插件名称前缀 name: my-plugin-fake-reverse-proxy rules: - path: /res/** file: directory: static # 如果想代理 static 下所有静态资源则省略 filename 配置 filename: halo.jpg 该 ReverseProxy 的访问路径为:/plugins/my-plugin/assets/res/halo.jpg。
自定义模型 API
定义并注册自定义模型后,Halo 会根据 GVK 注解自动生成一组 CRUD APIs。 PhotoVo 类型定义 { "metadata": { "name": "string", // 唯一标识 "labels": { "additionalProp1": "string" }, "annotations": { "additionalProp1": "string" }, "creationTimestamp": "2022-11-20T13:06:38.512Z", // 创建时间 }, "spec": { "displayName": "string", // 图片名称 "description": "string", // 图片描述 "url": "string", // 图片链接 "cover": "string", // 封面链接 "priority": 0, // 优先级 "groupName": "string", // 分组名称,对应分组 metadata.name }, } 路由信息 * 模板路径:/templates/photos.html * 访问路径:/photos | /photos/page/{page} /photos?group=photo-group-UEcvi | /photos/page/1?group=photo-group-UEcvi 生成 APIs 的规则为:/apis/<group>/<version>/<extension>/{extensionname}/<subextension> 例如,Person 自定义模型将有以下 APIs: GET /apis/my-plugin.halo.run/v1alpha1/persons:列出所有对象。 GET /apis/my-plugin.halo.run/v1alpha1/persons/{name}:根据名称查询对象。 POST /apis/my-plugin.halo.run/v1alpha1/persons:创建对象。 PUT /apis/my-plugin.halo.run/v1alpha1/persons/{name}:更新对象。 DELETE /apis/my-plugin.halo.run/v1alpha1/persons/{name}:删除对象。 其中,列出所有对象的 API 支持以下参数: page:页码,从 1 开始。 size:每页的数据量。 sort:排序字段,格式为 字段名,排序方式,例如 name,desc,可传递多个排序字段,排序使用的字段必须是注册为索引的字段。 labelSelector:标签选择器,用于筛选特定标签的对象。详见 标签选择器参数规则。 fieldSelector:字段选择器,用于筛选注册为索引的字段。详见 字段选择器参数规则。 示例: GET /apis/my-plugin.halo.run/v1alpha1/persons? page=1& size=10& sort=name,desc& labelSelector=name=halo& fieldSelector=spec.slug=halo 表示查询 metadata.labels 中 name 的值等于 halo 且 spec.slug 的值等于 halo 的自定义模型对象, 并按照 name 字段降序排序,查询第 1 页,每页 10 条数据。 annotations annotations 是一个字符串键值对集合,用于存放扩展信息,命名规则与 labels 相同。 可以使用 metadata.annotations 存放一些额外的信息,如 JSON 数据、配置信息等。 Annotations 元数据适配 根据 Halo 的元数据表单定义文档和模型元数据文档,Halo 支持为部分模型的表单添加元数据表单,此插件同样适配了此功能,如果你作为主题开发者,需要为链接或者链接分组添加额外的字段,可以参考上述文档并结合下面的 TargetRef 列表进行适配。 对应模型 group kind 图库 core.halo.run Photo 图库分组 core.halo.run PhotoGroup API 文档可以通过访问 /swagger-ui.html 查看,例如:http://localhost:8090/swagger-ui.html。
快速创建halo插件模板
git clone https://github.com/halo-dev/create-halo-plugin.git halo-plugins cd halo-plugins pnpm create halo-plugin myplugin cd myplugin ./gradlew haloServer #In another terminal, start UI dev cd ui pnpm dev git clone https://github.com/halo-dev/plugin-feed.git feed git clone https://github.com/halo-dev/plugin-s3.git s3 git clone https://github.com/halo-dev/plugin-comment-widget.git comment git clone https://github.com/halo-sigs/plugin-photos.git photos (图库管理插件) git clone https://github.com/chengzhongxue/plugin-vote.git vote (投票插件, 创建管理投票) git clone https://github.com/chengzhongxue/plugin-mail-template.git mailtpl (邮件模板管理,查看、编辑邮件模板) git clone https://github.com/monyuan/notify-me.git noticeme (当有新评论、待审核评论、发布文章、投稿时将通知推送到微信、企业微信、钉钉、飞书、微信测试号等应用上。) git clone https://github.com/acanyo/plugin-announcement.git announce (一个功能强大的 Halo 博客系统公告通知插件,支持自定义弹窗内容、按钮行为、动画效果和智能弹出控制) git clone https://github.com/halo-sigs/plugin-page-cache.git pagecache (提供页面的静态缓存功能,提高页面访问速度)