diff --git a/README.md b/README.md index ce8efef..5013f5d 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,31 @@ # plugin-moments -Halo 2.0 的瞬间管理插件, 支持在 Console 进行管理以及为主题端提供 `/moments` 页面路由。 +Halo 2.0 的瞬间管理插件,提供一个轻量级的内容发布功能,支持发布图文、视频、音频等内容。 + +![Preview](./images/plugin-moments-preview.png) ## 使用方式 1. 下载,目前提供以下两个下载方式: - - GitHub Releases:访问 [Releases](https://github.com/halo-sigs/plugin-moments/releases) 下载 Assets 中的 JAR 文件。 - Halo 应用市场: + - GitHub Releases:访问 [Releases](https://github.com/halo-sigs/plugin-moments/releases) 下载 Assets 中的 JAR 文件。 2. 安装,插件安装和更新方式可参考: 3. 安装完成之后,访问 Console 左侧的**瞬间**菜单项,即可进行管理。 4. 前台访问地址为 `/moments`,需要注意的是,此插件需要主题提供模板(moments.html)才能访问 `/moments`。 +5. 此插件也提供了 RSS 订阅的路由,可以访问 `/moments/rss.xml`。 -## 主题适配 +## 开发环境 -目前此插件为主题端提供了 `/moments` 路由,模板为 `moments.html`,也提供了 [Finder API](https://docs.halo.run/developer-guide/theme/finder-apis),可以将瞬间列表渲染到任何地方。 +插件开发的详细文档请查阅: -## 开发环境 +所需环境: + +1. Java 17 +2. Node 18 +3. pnpm 8 +4. Docker (可选) + +克隆项目: ```bash git clone git@github.com:halo-sigs/plugin-moments.git @@ -29,6 +39,10 @@ git clone git@github.com:{your_github_id}/plugin-moments.git cd path/to/plugin-moments ``` +### 运行方式 1(推荐) + +> 此方式需要本地安装 Docker + ```bash # macOS / Linux ./gradlew pnpmInstall @@ -37,6 +51,22 @@ cd path/to/plugin-moments ./gradlew.bat pnpmInstall ``` +```bash +# macOS / Linux +./gradlew haloServer + +# Windows +./gradlew.bat haloServer +``` + +执行此命令后,会自动创建一个 Halo 的 Docker 容器并加载当前的插件,更多文档可查阅: + +### 运行方式 2 + +> 此方式需要使用源码运行 Halo + +编译插件: + ```bash # macOS / Linux ./gradlew build @@ -49,40 +79,52 @@ cd path/to/plugin-moments ```yaml halo: - plugin: - runtime-mode: development - classes-directories: - - "build/classes" - - "build/resources" - lib-directories: - - "libs" - fixedPluginPath: - - "/path/to/plugin-moments" + plugin: + runtime-mode: development + fixedPluginPath: + - "/path/to/plugin-moments" ``` +最后重启 Halo 项目即可。 + +## 主题适配 + +目前此插件为主题端提供了 `/moments` 路由,模板为 `moments.html`,也提供了 [Finder API](https://docs.halo.run/developer-guide/theme/finder-apis),可以将瞬间列表渲染到任何地方。 + ### 模板变量 -#### 路由信息 +#### 列表页面 /moments - 模板路径:/templates/moments.html - 访问路径:/moments?tag={tag} | moments/page/{page}?tag={tag} -#### 参数 - -tag - 标签名称 +**参数**: -#### 变量 +- tag:标签名称,用于筛选。 -moments +**变量**: -##### 变量类型 +- moments:[#UrlContextListResult\](#urlcontextlistresult-momentvo) +- tags:[#List\](#momenttagvo) -[#UrlContextListResult\](#urlcontextlistresult-momentvo) - -##### 示例 +**示例**: ```html + + +
+
  • @@ -105,38 +147,16 @@ moments
``` -#### 变量 - -tags - -##### 变量类型 - -[#List\](#momenttagvo) - -##### 示例 - -```html -
    -
  • -
    -
  • -
-``` - -#### 详情路由 +#### 详情页面 /moments/{name} - 模板路径:/templates/moment.html - 访问路径:/moments/{name} -#### 变量 - -moment +**变量**: -##### 变量类型 +- moment:[#MomentVo](#momentvo) -[#MomentVo](#momentvo) - -##### 示例 +**示例**: ```html
@@ -151,27 +171,15 @@ moment
``` -### RSS 订阅地址 - -- 访问路径:/moments/rss.xml - ### Finder API #### listAll() -##### 描述 - 获取全部瞬间内容。 -##### 参数 - -无 - -##### 返回值 +**返回值类型**:List<[#MomentVo](#momentvo)> -List<[#MomentVo](#momentvo)> - -##### 示例 +**示例**: ```html
    @@ -188,20 +196,16 @@ List<[#MomentVo](#momentvo)> #### list(page, size) -##### 描述 - 根据分页参数获取瞬间列表。 -##### 参数 +**参数**: 1. `page: int` - 分页页码,从 1 开始 2. `size: int` - 分页条数 -##### 返回值 - -[ListResult\](#listresult-momentvo) +**返回值类型**:[ListResult\](#listresult-momentvo) -##### 示例 +**示例**: ```html @@ -227,44 +231,45 @@ List<[#MomentVo](#momentvo)> ```json { - "metadata": { - "name": "string", // 唯一标识 - "labels": { - "additionalProp1": "string", + "metadata": { + "name": "string", // 唯一标识 + "labels": { + "additionalProp1": "string" + }, + "annotations": { + "additionalProp1": "string" + }, + "creationTimestamp": "2022-11-20T13:06:38.512Z" // 创建时间 }, - "annotations": { - "additionalProp1": "string", + "spec": { + "content": { + "raw": "string", // 原始内容,一般用于编辑器使用 + "html": "string", // HTML 内容,用于主题端进行最终渲染的内容 + "medium": [ + // 媒体内容 + { + "type": "#MomentMediaType", // 类型 + "url": "string", // 链接 + "originType": "string" // 原始类型,例如:image/jpeg + } + ] + }, + "releaseTime": "string", // 发布时间 + "visible": "PUBLIC", // 可见性 + "owner": "string", // 所属用户 + "tags": ["string"] // 所拥有的标签 }, - "creationTimestamp": "2022-11-20T13:06:38.512Z", // 创建时间 - }, - "spec": { - "content": { - "raw": "string", // 原始内容,一般用于编辑器使用 - "html": "string", // HTML 内容,用于主题端进行最终渲染的内容 - "medium": [ // 媒体内容 - { - "type": "#MomentMediaType", // 类型 - "url": "string", // 链接 - "originType": "string", // 原始类型,例如:image/jpeg - } - ] + "owner": { + "name": "string", // 用户名 + "avatar": "string", // 头像 + "bio": "string", // 描述 + "displayName": "string" // 显示名称 }, - "releaseTime": "string", // 发布时间 - "visible": "PUBLIC", // 可见性 - "owner": "string", // 所属用户 - "tags": ["string"], // 所拥有的标签 - }, - "owner": { - "name": "string", // 用户名 - "avatar": "string", // 头像 - "bio": "string", // 描述 - "displayName": "string", // 显示名称 - }, - "stats": { - "upvote": 0, // 点赞数 - "totalComment": 0, // 评论数 - "approvedComment": 0, // 审核通过的评论数 - } + "stats": { + "upvote": 0, // 点赞数 + "totalComment": 0, // 评论数 + "approvedComment": 0 // 审核通过的评论数 + } } ``` @@ -283,15 +288,15 @@ enum Target { ```json { - "page": 0, // 当前页码 - "size": 0, // 每页条数 - "total": 0, // 总条数 - "items": "List<#MomentVo>", // 瞬间列表数据 - "first": true, // 是否为第一页 - "last": true, // 是否为最后一页 - "hasNext": true, // 是否有下一页 - "hasPrevious": true, // 是否有上一页 - "totalPages": 0, // 总页数 + "page": 0, // 当前页码 + "size": 0, // 每页条数 + "total": 0, // 总条数 + "items": "List<#MomentVo>", // 瞬间列表数据 + "first": true, // 是否为第一页 + "last": true, // 是否为最后一页 + "hasNext": true, // 是否有下一页 + "hasPrevious": true, // 是否有上一页 + "totalPages": 0 // 总页数 } ``` @@ -299,17 +304,17 @@ enum Target { ```json { - "page": 0, // 当前页码 - "size": 0, // 每页条数 - "total": 0, // 总条数 - "items": "List<#MomentVo>", // 瞬间列表数据 - "first": true, // 是否为第一页 - "last": true, // 是否为最后一页 - "hasNext": true, // 是否有下一页 - "hasPrevious": true, // 是否有上一页 - "totalPages": 0, // 总页数 - "prevUrl": "string", // 上一页链接 - "nextUrl": "string", // 下一页链接 + "page": 0, // 当前页码 + "size": 0, // 每页条数 + "total": 0, // 总条数 + "items": "List<#MomentVo>", // 瞬间列表数据 + "first": true, // 是否为第一页 + "last": true, // 是否为最后一页 + "hasNext": true, // 是否有下一页 + "hasPrevious": true, // 是否有上一页 + "totalPages": 0, // 总页数 + "prevUrl": "string", // 上一页链接 + "nextUrl": "string" // 下一页链接 } ``` @@ -317,7 +322,7 @@ enum Target { ```json { - "name": "string", // 标签名称 - "momentCount": 0, // 标签所属的 moment 数量 + "name": "string", // 标签名称 + "momentCount": 0 // 标签所属的 moment 数量 } ``` diff --git a/images/plugin-moments-preview.png b/images/plugin-moments-preview.png new file mode 100644 index 0000000..6d2ba19 Binary files /dev/null and b/images/plugin-moments-preview.png differ