-
+
-
+ + + + ++ el.focus()" + @blur="handleUpdate()" + @keyup.enter="handleUpdate()" + @keyup.escape="selectedTodo = undefined" + /> +
+
From bc5fe022839461e46fbe7ee54af8a51fe0b03091 Mon Sep 17 00:00:00 2001
From: Ryan Wang
Date: Fri, 28 Apr 2023 11:50:17 +0800
Subject: [PATCH] docs: docs: update documentation for Halo 2.5 (#212)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
为 Halo 2.5 更新文档。
/kind documentation
```release-note
None
```
---
docs/developer-guide/core/build.md | 10 +-
.../getting-started/install/docker-compose.md | 22 +-
docs/getting-started/install/docker.md | 16 +-
docs/getting-started/install/other/traefik.md | 2 +-
docs/intro.md | 2 +-
docs/user-guide/faq.md | 4 +-
docusaurus.config.js | 19 +-
i18n/zh-Hans/code.json | 62 +-
.../current.json | 2 +-
.../version-2.5.json | 62 ++
versioned_docs/version-2.5/about.md | 16 +
.../version-2.5/contribution/issue.md | 28 +
versioned_docs/version-2.5/contribution/pr.md | 110 +++
.../developer-guide/annotations-form.md | 89 +++
.../version-2.5/developer-guide/core/build.md | 99 +++
.../developer-guide/core/code-style.md | 30 +
.../developer-guide/core/prepare.md | 25 +
.../version-2.5/developer-guide/core/run.md | 122 ++++
.../developer-guide/core/structure.md | 36 +
.../developer-guide/form-schema.md | 271 +++++++
.../plugin/api-reference/extension-client.md | 104 +++
.../plugin/api-reference/extension.md | 127 ++++
.../plugin/api-reference/reverseproxy.md | 36 +
.../plugin/api-reference/role-template.md | 103 +++
.../plugin/examples/todolist.md | 675 ++++++++++++++++++
.../developer-guide/plugin/hello-world.md | 55 ++
.../developer-guide/plugin/introduction.md | 27 +
.../developer-guide/plugin/lifecycle.md | 37 +
.../developer-guide/plugin/manifest.md | 44 ++
.../plugin/object-management.md | 48 ++
.../developer-guide/plugin/prepare.md | 15 +
.../developer-guide/plugin/publish.md | 19 +
.../developer-guide/plugin/runtime-mode.md | 35 +
.../developer-guide/plugin/structure.md | 76 ++
.../developer-guide/theme/annotations.md | 64 ++
.../developer-guide/theme/code-snippets.md | 47 ++
.../developer-guide/theme/config.md | 89 +++
.../developer-guide/theme/finder-apis.md | 10 +
.../theme/finder-apis/category.md | 187 +++++
.../theme/finder-apis/comment.md | 155 ++++
.../theme/finder-apis/contributor.md | 64 ++
.../developer-guide/theme/finder-apis/menu.md | 87 +++
.../theme/finder-apis/plugin.md | 33 +
.../developer-guide/theme/finder-apis/post.md | 430 +++++++++++
.../theme/finder-apis/single-page.md | 131 ++++
.../theme/finder-apis/site-stats.md | 45 ++
.../developer-guide/theme/finder-apis/tag.md | 139 ++++
.../theme/finder-apis/theme.md | 119 +++
.../developer-guide/theme/global-variables.md | 58 ++
.../developer-guide/theme/prepare.md | 104 +++
.../developer-guide/theme/settings.md | 135 ++++
.../developer-guide/theme/static-resources.md | 55 ++
.../developer-guide/theme/structure.md | 33 +
.../theme/template-route-mapping.md | 87 +++
.../developer-guide/theme/template-tag.md | 57 ++
.../theme/template-variables.md | 7 +
.../theme/template-variables/archives.md | 108 +++
.../theme/template-variables/author.md | 104 +++
.../theme/template-variables/categories.md | 54 ++
.../theme/template-variables/category.md | 105 +++
.../theme/template-variables/index_.md | 98 +++
.../theme/template-variables/page.md | 53 ++
.../theme/template-variables/post.md | 65 ++
.../theme/template-variables/tag.md | 105 +++
.../theme/template-variables/tags.md | 39 +
.../theme/vo/CategoryTreeVo.md | 33 +
.../developer-guide/theme/vo/CategoryVo.md | 31 +
.../developer-guide/theme/vo/CommentVo.md | 53 ++
.../developer-guide/theme/vo/ContentVo.md | 6 +
.../developer-guide/theme/vo/ContributorVo.md | 9 +
.../developer-guide/theme/vo/ListedPostVo.md | 65 ++
.../theme/vo/ListedSinglePageVo.md | 57 ++
.../developer-guide/theme/vo/MenuItemVo.md | 44 ++
.../developer-guide/theme/vo/MenuVo.md | 21 +
.../developer-guide/theme/vo/PostVo.md | 66 ++
.../developer-guide/theme/vo/ReplyVo.md | 42 ++
.../developer-guide/theme/vo/SinglePageVo.md | 58 ++
.../developer-guide/theme/vo/SiteSettingVo.md | 26 +
.../developer-guide/theme/vo/TagVo.md | 26 +
.../developer-guide/theme/vo/ThemeVo.md | 36 +
.../developer-guide/theme/vo/UserVo.md | 28 +
.../version-2.5/getting-started/config.md | 238 ++++++
.../version-2.5/getting-started/downloads.md | 25 +
.../version-2.5/getting-started/first-post.md | 38 +
.../getting-started/install/1panel.md | 80 +++
.../getting-started/install/docker-compose.md | 380 ++++++++++
.../getting-started/install/docker.md | 113 +++
.../install/other/nginxproxymanager.md | 164 +++++
.../install/other/oneinstack.md | 274 +++++++
.../getting-started/install/other/traefik.md | 121 ++++
.../install/slots/docker-args.md | 17 +
.../getting-started/migrate-from-1.x.md | 80 +++
.../version-2.5/getting-started/prepare.md | 98 +++
versioned_docs/version-2.5/intro.md | 76 ++
.../version-2.5/user-guide/attachments.md | 102 +++
.../user-guide/backup-migration.md | 38 +
.../version-2.5/user-guide/common.md | 72 ++
.../version-2.5/user-guide/config.md | 172 +++++
versioned_docs/version-2.5/user-guide/faq.md | 155 ++++
.../version-2.5/user-guide/markdown.md | 454 ++++++++++++
.../version-2.5/user-guide/pages.md | 41 ++
.../version-2.5/user-guide/plugins.md | 52 ++
.../version-2.5/user-guide/posts.md | 150 ++++
.../version-2.5/user-guide/settings.md | 72 ++
.../version-2.5/user-guide/themes.md | 80 +++
.../version-2.5/user-guide/users.md | 95 +++
versioned_sidebars/version-2.5-sidebars.json | 203 ++++++
versions.json | 1 +
108 files changed, 9218 insertions(+), 69 deletions(-)
create mode 100644 i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.5.json
create mode 100644 versioned_docs/version-2.5/about.md
create mode 100644 versioned_docs/version-2.5/contribution/issue.md
create mode 100644 versioned_docs/version-2.5/contribution/pr.md
create mode 100644 versioned_docs/version-2.5/developer-guide/annotations-form.md
create mode 100644 versioned_docs/version-2.5/developer-guide/core/build.md
create mode 100644 versioned_docs/version-2.5/developer-guide/core/code-style.md
create mode 100644 versioned_docs/version-2.5/developer-guide/core/prepare.md
create mode 100644 versioned_docs/version-2.5/developer-guide/core/run.md
create mode 100644 versioned_docs/version-2.5/developer-guide/core/structure.md
create mode 100644 versioned_docs/version-2.5/developer-guide/form-schema.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/api-reference/extension-client.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/api-reference/extension.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/api-reference/reverseproxy.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/api-reference/role-template.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/examples/todolist.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/hello-world.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/introduction.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/lifecycle.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/manifest.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/object-management.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/prepare.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/publish.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/runtime-mode.md
create mode 100644 versioned_docs/version-2.5/developer-guide/plugin/structure.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/annotations.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/code-snippets.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/config.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/category.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/comment.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/contributor.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/menu.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/plugin.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/post.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/single-page.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/site-stats.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/tag.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/finder-apis/theme.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/global-variables.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/prepare.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/settings.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/static-resources.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/structure.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-route-mapping.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-tag.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/archives.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/author.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/categories.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/category.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/index_.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/page.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/post.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/tag.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/template-variables/tags.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/CategoryTreeVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/CategoryVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/CommentVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ContentVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ContributorVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ListedPostVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ListedSinglePageVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/MenuItemVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/MenuVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/PostVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ReplyVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/SinglePageVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/SiteSettingVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/TagVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/ThemeVo.md
create mode 100644 versioned_docs/version-2.5/developer-guide/theme/vo/UserVo.md
create mode 100644 versioned_docs/version-2.5/getting-started/config.md
create mode 100644 versioned_docs/version-2.5/getting-started/downloads.md
create mode 100644 versioned_docs/version-2.5/getting-started/first-post.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/1panel.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/docker-compose.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/docker.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/other/nginxproxymanager.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/other/oneinstack.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/other/traefik.md
create mode 100644 versioned_docs/version-2.5/getting-started/install/slots/docker-args.md
create mode 100644 versioned_docs/version-2.5/getting-started/migrate-from-1.x.md
create mode 100644 versioned_docs/version-2.5/getting-started/prepare.md
create mode 100644 versioned_docs/version-2.5/intro.md
create mode 100644 versioned_docs/version-2.5/user-guide/attachments.md
create mode 100644 versioned_docs/version-2.5/user-guide/backup-migration.md
create mode 100644 versioned_docs/version-2.5/user-guide/common.md
create mode 100644 versioned_docs/version-2.5/user-guide/config.md
create mode 100644 versioned_docs/version-2.5/user-guide/faq.md
create mode 100644 versioned_docs/version-2.5/user-guide/markdown.md
create mode 100644 versioned_docs/version-2.5/user-guide/pages.md
create mode 100644 versioned_docs/version-2.5/user-guide/plugins.md
create mode 100644 versioned_docs/version-2.5/user-guide/posts.md
create mode 100644 versioned_docs/version-2.5/user-guide/settings.md
create mode 100644 versioned_docs/version-2.5/user-guide/themes.md
create mode 100644 versioned_docs/version-2.5/user-guide/users.md
create mode 100644 versioned_sidebars/version-2.5-sidebars.json
diff --git a/docs/developer-guide/core/build.md b/docs/developer-guide/core/build.md
index 2479c19..3c132b3 100644
--- a/docs/developer-guide/core/build.md
+++ b/docs/developer-guide/core/build.md
@@ -28,7 +28,7 @@ git checkout v2.4.0
```
:::tip
-请务必按照以上要求切换到最新的 tag,而不是直接使用 main 分支构建,main 分支是我们的开发分支。此文档以 `2.4.0` 为例,查看最新的 tag 可使用 `git tag --column` 查看。
+请务必按照以上要求切换到最新的 tag,而不是直接使用 main 分支构建,main 分支是我们的开发分支。此文档以 `2.5.0` 为例,查看最新的 tag 可使用 `git tag --column` 查看。
:::
:::warning
@@ -63,7 +63,7 @@ pnpm build
## 构建 Fat Jar
-构建之前需要修改 `gradle.properties` 中的 `version` 为当前 tag 的版本号,如:`version=2.4.0`
+构建之前需要修改 `gradle.properties` 中的 `version` 为当前 tag 的版本号,如:`version=2.5.0`
```bash
cd path/to/halo
@@ -77,18 +77,18 @@ cd path/to/halo
./gradlew clean build -x check
```
-构建完成之后,在 halo 项目下产生的 `application/build/libs/halo-2.4.0.jar` 即为构建完成的文件。
+构建完成之后,在 halo 项目下产生的 `application/build/libs/halo-2.5.0.jar` 即为构建完成的文件。
## 构建 Docker 镜像
-在进行之前,请确保已经完成上述操作,最终需要确认在 halo 项目的 `application/build/libs/` 目录已经包含了 `halo-2.4.0.jar` 文件。
+在进行之前,请确保已经完成上述操作,最终需要确认在 halo 项目的 `application/build/libs/` 目录已经包含了 `halo-2.5.0.jar` 文件。
```bash
cd path/to/halo
```
```bash
-docker build -t halo-dev/halo:2.4.0 .
+docker build -t halo-dev/halo:2.5.0 .
```
```bash
diff --git a/docs/getting-started/install/docker-compose.md b/docs/getting-started/install/docker-compose.md
index dfb49bb..938b9b4 100644
--- a/docs/getting-started/install/docker-compose.md
+++ b/docs/getting-started/install/docker-compose.md
@@ -20,18 +20,18 @@ import DockerArgs from "./slots/docker-args.md"
## 创建容器组
-可用的 Halo 2.4 的 Docker 镜像:
+可用的 Halo 2.5 的 Docker 镜像:
- [halohub/halo](https://hub.docker.com/r/halohub/halo)
- [ghcr.io/halo-dev/halo](https://github.com/halo-dev/halo/pkgs/container/halo)
:::info 注意
-目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 `halohub/halo:2.4` 或者 `halohub/halo:2.4.0`。
+目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 `halohub/halo:2.5` 或者 `halohub/halo:2.5.0`。
-- `halohub/halo:2.4`:表示最新的 2.4.x 版本,即每次发布 patch 版本都会同时更新 `halohub/halo:2.4` 镜像。
-- `halohub/halo:2.4.0`:表示一个具体的版本。
+- `halohub/halo:2.5`:表示最新的 2.5.x 版本,即每次发布 patch 版本都会同时更新 `halohub/halo:2.5` 镜像。
+- `halohub/halo:2.5.0`:表示一个具体的版本。
-后续文档以 `halohub/halo:2.4` 为例。
+后续文档以 `halohub/halo:2.5` 为例。
:::
1. 在系统任意位置创建一个文件夹,此文档以 `~/halo` 为例。
@@ -59,7 +59,7 @@ import DockerArgs from "./slots/docker-args.md"
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
depends_on:
@@ -121,7 +121,7 @@ import DockerArgs from "./slots/docker-args.md"
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
depends_on:
@@ -189,7 +189,7 @@ import DockerArgs from "./slots/docker-args.md"
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
volumes:
@@ -217,7 +217,7 @@ import DockerArgs from "./slots/docker-args.md"
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
network_mode: "host"
@@ -285,7 +285,7 @@ import DockerArgs from "./slots/docker-args.md"
```yaml {3}
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
```
@@ -324,7 +324,7 @@ networks:
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
volumes:
diff --git a/docs/getting-started/install/docker.md b/docs/getting-started/install/docker.md
index c9df96a..99ac570 100644
--- a/docs/getting-started/install/docker.md
+++ b/docs/getting-started/install/docker.md
@@ -25,18 +25,18 @@ import DockerArgs from "./slots/docker-args.md"
## 使用 Docker 镜像
-可用的 Halo 2.4 的 Docker 镜像:
+可用的 Halo 2.5 的 Docker 镜像:
- [halohub/halo](https://hub.docker.com/r/halohub/halo)
- [ghcr.io/halo-dev/halo](https://github.com/halo-dev/halo/pkgs/container/halo)
:::info 注意
-目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 `halohub/halo:2.4` 或者 `halohub/halo:2.4.0`。
+目前 Halo 2 并未更新 Docker 的 latest 标签镜像,主要因为 Halo 2 不兼容 1.x 版本,防止使用者误操作。我们推荐使用固定版本的标签,比如 `halohub/halo:2.5` 或者 `halohub/halo:2.5.0`。
-- `halohub/halo:2.4`:表示最新的 2.4.x 版本,即每次发布 patch 版本都会同时更新 `halohub/halo:2.4` 镜像。
-- `halohub/halo:2.4.0`:表示一个具体的版本。
+- `halohub/halo:2.5`:表示最新的 2.5.x 版本,即每次发布 patch 版本都会同时更新 `halohub/halo:2.5` 镜像。
+- `halohub/halo:2.5.0`:表示一个具体的版本。
-后续文档以 `halohub/halo:2.4` 为例。
+后续文档以 `halohub/halo:2.5` 为例。
:::
1. 创建容器
@@ -47,7 +47,7 @@ import DockerArgs from "./slots/docker-args.md"
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
- halohub/halo:2.4 \
+ halohub/halo:2.5 \
--halo.external-url=http://localhost:8090/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
@@ -78,7 +78,7 @@ import DockerArgs from "./slots/docker-args.md"
1. 拉取新版本镜像
```bash
- docker pull halohub/halo:2.4
+ docker pull halohub/halo:2.5
```
2. 停止运行中的容器
@@ -106,7 +106,7 @@ import DockerArgs from "./slots/docker-args.md"
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
- halohub/halo:2.4 \
+ halohub/halo:2.5 \
--halo.external-url=http://localhost:8090/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
diff --git a/docs/getting-started/install/other/traefik.md b/docs/getting-started/install/other/traefik.md
index 40ea5a5..dfcf048 100644
--- a/docs/getting-started/install/other/traefik.md
+++ b/docs/getting-started/install/other/traefik.md
@@ -96,7 +96,7 @@ networks:
services:
halo:
- image: halohub/halo:2.4
+ image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
volumes:
diff --git a/docs/intro.md b/docs/intro.md
index 16b14b3..8e3109a 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -39,7 +39,7 @@ docker run \
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
- halohub/halo:2.4 \
+ halohub/halo:2.5 \
--halo.external-url=http://localhost:8090/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
diff --git a/docs/user-guide/faq.md b/docs/user-guide/faq.md
index 2f1f949..e1737ff 100644
--- a/docs/user-guide/faq.md
+++ b/docs/user-guide/faq.md
@@ -113,7 +113,7 @@ server {
-v ~/.halo2.1:/root/.halo2 \
-e HALO_EXTERNAL_URL=http://localhost:8090/ \
-e HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=P@88w0rd \
- halohub/halo:2.4
+ halohub/halo:2.5
# 第二个 Halo 容器
docker run \
@@ -123,7 +123,7 @@ server {
-v ~/.halo2.2:/root/.halo2 \
-e HALO_EXTERNAL_URL=http://localhost:8090/ \
-e HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=P@88w0rd \
- halohub/halo:2.4
+ halohub/halo:2.5
```
更多 Docker 相关的教程请参考:[使用 Docker 部署 Halo](../getting-started/install/docker.md)
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 2f96897..62269a9 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -34,11 +34,11 @@ const config = {
showLastUpdateAuthor: true,
remarkPlugins: [math, mermaid],
rehypePlugins: [katex],
- lastVersion: "2.4",
+ lastVersion: "2.5",
versions: {
current: {
- label: "2.5.0-SNAPSHOT",
- path: "2.5.0-SNAPSHOT",
+ label: "2.6.0-SNAPSHOT",
+ path: "2.6.0-SNAPSHOT",
},
},
},
@@ -272,13 +272,14 @@ const config = {
if (existingPath.startsWith("/1.4/")) {
return [existingPath.replace("/1.4/", "/1.4.17/")];
}
- if (existingPath.startsWith("/2.5.0-SNAPSHOT/")) {
+ if (existingPath.startsWith("/2.6.0-SNAPSHOT/")) {
return [
- existingPath.replace("/2.5.0-SNAPSHOT/", "/2.0.0-SNAPSHOT/"),
- existingPath.replace("/2.5.0-SNAPSHOT/", "/2.1.0-SNAPSHOT/"),
- existingPath.replace("/2.5.0-SNAPSHOT/", "/2.2.0-SNAPSHOT/"),
- existingPath.replace("/2.5.0-SNAPSHOT/", "/2.3.0-SNAPSHOT/"),
- existingPath.replace("/2.5.0-SNAPSHOT/", "/2.4.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.0.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.1.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.2.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.3.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.4.0-SNAPSHOT/"),
+ existingPath.replace("/2.6.0-SNAPSHOT/", "/2.5.0-SNAPSHOT/"),
];
}
return undefined;
diff --git a/i18n/zh-Hans/code.json b/i18n/zh-Hans/code.json
index 751ec81..8469f9d 100644
--- a/i18n/zh-Hans/code.json
+++ b/i18n/zh-Hans/code.json
@@ -25,18 +25,6 @@
"message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。",
"description": "The 2nd paragraph of the 404 page"
},
- "theme.blog.archive.title": {
- "message": "历史博文",
- "description": "The page & hero title of the blog archive page"
- },
- "theme.blog.archive.description": {
- "message": "历史博文",
- "description": "The page & hero description of the blog archive page"
- },
- "theme.BackToTopButton.buttonAriaLabel": {
- "message": "回到顶部",
- "description": "The ARIA label for the back to top button"
- },
"theme.admonition.note": {
"message": "备注",
"description": "The default label used for the Note admonition (:::note)"
@@ -57,6 +45,18 @@
"message": "警告",
"description": "The default label used for the Caution admonition (:::caution)"
},
+ "theme.BackToTopButton.buttonAriaLabel": {
+ "message": "回到顶部",
+ "description": "The ARIA label for the back to top button"
+ },
+ "theme.blog.archive.title": {
+ "message": "历史博文",
+ "description": "The page & hero title of the blog archive page"
+ },
+ "theme.blog.archive.description": {
+ "message": "历史博文",
+ "description": "The page & hero description of the blog archive page"
+ },
"theme.blog.paginator.navAriaLabel": {
"message": "博文列表分页导航",
"description": "The ARIA label for the blog pagination"
@@ -125,6 +125,14 @@
"message": "下一页",
"description": "The label used to navigate to the next doc"
},
+ "theme.docs.tagDocListPageTitle.nDocsTagged": {
+ "message": "{count} 篇文档带有标签",
+ "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
+ },
+ "theme.docs.tagDocListPageTitle": {
+ "message": "{nDocsTagged}「{tagName}」",
+ "description": "The title of the page for a docs tag"
+ },
"theme.docs.versionBadge.label": {
"message": "版本:{versionLabel}"
},
@@ -164,14 +172,6 @@
"message": "最后{byUser}{atDate}更新",
"description": "The sentence used to display when a page has been last updated, and by who"
},
- "theme.docs.tagDocListPageTitle.nDocsTagged": {
- "message": "{count} 篇文档带有标签",
- "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
- },
- "theme.docs.tagDocListPageTitle": {
- "message": "{nDocsTagged}「{tagName}」",
- "description": "The title of the page for a docs tag"
- },
"theme.navbar.mobileVersionsDropdown.label": {
"message": "选择版本",
"description": "The label for the navbar versions dropdown on mobile view"
@@ -216,10 +216,6 @@
"message": "选择语言",
"description": "The label for the mobile language switcher dropdown"
},
- "theme.TOCCollapsible.toggleButtonLabel": {
- "message": "本页总览",
- "description": "The label used by the button on the collapsible TOC component"
- },
"theme.blog.post.readMore": {
"message": "阅读更多",
"description": "The label used in blog post item excerpts to link to full blog posts"
@@ -228,10 +224,18 @@
"message": "阅读 {title} 的全文",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
+ "theme.TOCCollapsible.toggleButtonLabel": {
+ "message": "本页总览",
+ "description": "The label used by the button on the collapsible TOC component"
+ },
"theme.blog.post.readingTime.plurals": {
"message": "阅读需 {readingTime} 分钟",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
+ "theme.docs.breadcrumbs.home": {
+ "message": "主页面",
+ "description": "The ARIA label for the home page in the breadcrumbs"
+ },
"theme.docs.sidebar.collapseButtonTitle": {
"message": "收起侧边栏",
"description": "The title attribute for collapse button of doc sidebar"
@@ -244,10 +248,6 @@
"message": "Docs sidebar",
"description": "The ARIA label for the sidebar navigation"
},
- "theme.docs.breadcrumbs.home": {
- "message": "主页面",
- "description": "The ARIA label for the home page in the breadcrumbs"
- },
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "关闭导航栏",
"description": "The ARIA label for close button of mobile sidebar"
@@ -268,6 +268,9 @@
"message": "展开侧边栏",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
+ "theme.SearchBar.seeAll": {
+ "message": "查看全部 {count} 个结果"
+ },
"theme.SearchPage.documentsFound.plurals": {
"message": "找到 {count} 份文件",
"description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
@@ -300,9 +303,6 @@
"message": "正在获取新的搜索结果...",
"description": "The paragraph for fetching new search results"
},
- "theme.SearchBar.seeAll": {
- "message": "查看全部 {count} 个结果"
- },
"theme.SearchBar.label": {
"message": "搜索",
"description": "The ARIA label and placeholder for search button"
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json
index 2eee943..156c6be 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current.json
@@ -1,6 +1,6 @@
{
"version.label": {
- "message": "2.5.0-SNAPSHOT",
+ "message": "2.6.0-SNAPSHOT",
"description": "The label for version current"
},
"sidebar.tutorialSidebar.category.入门": {
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.5.json b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.5.json
new file mode 100644
index 0000000..ce86344
--- /dev/null
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/version-2.5.json
@@ -0,0 +1,62 @@
+{
+ "version.label": {
+ "message": "2.5",
+ "description": "The label for version 2.5"
+ },
+ "sidebar.tutorialSidebar.category.入门": {
+ "message": "入门",
+ "description": "The label for category 入门 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.安装指南": {
+ "message": "安装指南",
+ "description": "The label for category 安装指南 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.其他指南": {
+ "message": "其他指南",
+ "description": "The label for category 其他指南 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.用户指南": {
+ "message": "用户指南",
+ "description": "The label for category 用户指南 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.开发者指南": {
+ "message": "开发者指南",
+ "description": "The label for category 开发者指南 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.系统开发": {
+ "message": "系统开发",
+ "description": "The label for category 系统开发 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.插件开发": {
+ "message": "插件开发",
+ "description": "The label for category 插件开发 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.基础": {
+ "message": "基础",
+ "description": "The label for category 基础 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.示例": {
+ "message": "示例",
+ "description": "The label for category 示例 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.API 参考": {
+ "message": "API 参考",
+ "description": "The label for category API 参考 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.主题开发": {
+ "message": "主题开发",
+ "description": "The label for category 主题开发 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.模板变量": {
+ "message": "模板变量",
+ "description": "The label for category 模板变量 in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.Finder API": {
+ "message": "Finder API",
+ "description": "The label for category Finder API in sidebar tutorialSidebar"
+ },
+ "sidebar.tutorialSidebar.category.参与贡献": {
+ "message": "参与贡献",
+ "description": "The label for category 参与贡献 in sidebar tutorialSidebar"
+ }
+}
diff --git a/versioned_docs/version-2.5/about.md b/versioned_docs/version-2.5/about.md
new file mode 100644
index 0000000..d0eb731
--- /dev/null
+++ b/versioned_docs/version-2.5/about.md
@@ -0,0 +1,16 @@
+---
+title: 关于文档
+description: 关于本文档站点的一些说明
+---
+
+:::note
+此文档使用 [Docusaurus](https://docusaurus.io/) 搭建,感谢 [Docusaurus](https://github.com/facebook/docusaurus) 社区所做的贡献。
+:::
+
+## 参与贡献
+
+:::tip
+如果你发现文档中有不正确或者需要添加的内容,非常欢迎参与到文档编辑当中。
+:::
+
+当前文档的仓库地址为 [halo-dev/docs](https://github.com/halo-dev/docs) ,所以你可以 fork 此仓库,修改之后提交 `Pull request` 等待我们合并即可。
diff --git a/versioned_docs/version-2.5/contribution/issue.md b/versioned_docs/version-2.5/contribution/issue.md
new file mode 100644
index 0000000..6ab45dd
--- /dev/null
+++ b/versioned_docs/version-2.5/contribution/issue.md
@@ -0,0 +1,28 @@
+---
+title: 问题反馈
+description: 问题反馈渠道及指南
+---
+
+:::info
+如果您在使用过程中遇到了什么问题,您可以通过下面的方式反馈,但请尽量按照要求提出反馈。
+:::
+
+## GitHub Issues
+
+链接:
+
+ Halo [ˈheɪloʊ],强大易用的开源建站工具。
+
+ The
+
+ HTML
+
+ specification
+ Hello Halo
+ 驿外
+
+
+ [1]
+
+
+ 断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨
+
+ 驿(yì)外:指荒僻、冷清之地。驿,驿站。
+
+ ↩︎
+
+
+
+
+### Attachment
+
+#### 描述
+
+附件类型的输入框,支持直接调用附件库弹框选择附件。
+
+#### 示例
+
+```yaml
+- $formkit: attachment
+ name: logo
+ label: Logo
+ value: ""
+```
+
+### Code
+
+#### 描述
+
+代码编辑器的输入组件,集成了 [Codemirror](https://codemirror.net/)。
+
+#### 参数
+
+- `language`:代码语言,目前支持 `yaml` `html` `javascript` `css` `json`。
+- `height`:代码编辑器的高度。
+
+#### 示例
+
+```yaml
+- $formkit: code
+ name: footer_code
+ label: 页脚代码注入
+ value: ""
+ language: yaml
+```
+
+### menuCheckbox
+
+#### 描述
+
+菜单复选框,用于选择系统内的导航菜单。其中选择的值为菜单资源 `metadata.name` 的集合。
+
+#### 示例
+
+```yaml
+- $formkit: menuCheckbox
+ name: menus
+ label: 菜单
+ value: []
+```
+
+### menuRadio
+
+#### 描述
+
+菜单单选框,用于选择系统内的导航菜单。其中选择的值为菜单资源 `metadata.name`。
+
+#### 示例
+
+```yaml
+- $formkit: menuRadio
+ name: menu
+ label: 菜单
+ value: ""
+```
+
+### postSelect
+
+#### 描述
+
+文章选择器,用于选择系统内的文章。其中选择的值为文章资源 `metadata.name`。
+
+#### 示例
+
+```yaml
+- $formkit: postSelect
+ name: post
+ label: 文章
+ value: ""
+```
+
+### singlePageSelect
+
+#### 描述
+
+单页选择器,用于选择系统内的独立页面。其中选择的值为独立页面资源 `metadata.name`。
+
+#### 示例
+
+```yaml
+- $formkit: singlePageSelect
+ name: singlePage
+ label: 单页
+ value: ""
+```
+
+### categorySelect
+
+#### 描述
+
+文章分类选择器,用于选择系统内的文章分类。其中选择的值为文章分类资源 `metadata.name`。
+
+#### 示例
+
+```yaml
+- $formkit: categorySelect
+ name: category
+ label: 分类
+ value: ""
+```
+
+### categoryCheckbox
+
+#### 描述
+
+文章分类复选框,用于选择系统内的文章分类。其中选择的值为文章分类资源 `metadata.name` 的集合。
+
+#### 示例
+
+```yaml
+- $formkit: categoryCheckbox
+ name: categories
+ label: 分类
+ value: []
+```
+
+### tagSelect
+
+#### 描述
+
+文章标签选择器,用于选择系统内的文章标签。其中选择的值为文章标签资源 `metadata.name`。
+
+#### 示例
+
+```yaml
+- $formkit: tagSelect
+ name: tag
+ label: 标签
+ value: ""
+```
+
+### tagCheckbox
+
+#### 描述
+
+文章标签复选框,用于选择系统内的文章标签。其中选择的值为文章标签资源 `metadata.name` 的集合。
+
+#### 示例
+
+```yaml
+- $formkit: tagCheckbox
+ name: tags
+ label: 标签
+ value: []
+```
diff --git a/versioned_docs/version-2.5/developer-guide/plugin/api-reference/extension-client.md b/versioned_docs/version-2.5/developer-guide/plugin/api-reference/extension-client.md
new file mode 100644
index 0000000..d7f88a2
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/plugin/api-reference/extension-client.md
@@ -0,0 +1,104 @@
+---
+title: 与自定义模型交互
+description: 了解如果通过代码的方式操作数据
+---
+
+Halo 提供了两个类用于与自定义模型数据交互 `ExtensionClient` 和 `ReactiveExtensionClient`。
+
+它们的本质就是操作数据库,区别在于 `ExtensionClient` 是阻塞式 API,而 `ReactiveExtensionClient` 是响应式 API,接口返回值只有两种 Mono 或 Flux,它们由 [reactor](https://projectreactor.io/) 提供。
+
+```java
+public interface ReactiveExtensionClient {
+
+ /**
+ * Lists Extensions by Extension type, filter and sorter.
+ *
+ * @param type is the class type of Extension.
+ * @param predicate filters the reEnqueue.
+ * @param comparator sorts the reEnqueue.
+ * @param
todos
+
+
+
+
++
+//...
+```
+
+至此,我们完成了从零开始创建一个 TodoList 插件的所有步骤,希望可以帮助你对 Halo 的插件开发有一个整体的了解。
diff --git a/versioned_docs/version-2.5/developer-guide/plugin/hello-world.md b/versioned_docs/version-2.5/developer-guide/plugin/hello-world.md
new file mode 100644
index 0000000..4aed17c
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/plugin/hello-world.md
@@ -0,0 +1,55 @@
+---
+title: 入门
+description: 了解如何构建你的第一个插件并在 Halo 中使用它。
+---
+
+Halo 提供了一个模板仓库用于创建插件:
+
+1. 打开 [plugin-starter](https://github.com/halo-dev/plugin-starter)。
+2. 点击 `Use this template` -> `Create a new repository`。
+3. 如图所示填写仓库名后点击 `Create repository from template`。
+
+
+你现在已经基于 Halo 插件模板创建了自己的存储库。接下来,你需要将它 `git clone` 到你的计算机上并使用 `IntelliJ IDEA` 打开它。
+
+## 运行插件
+
+现在有了一个空项目,我们需要让插件能最最小化的运行起来。
+
+这很简单,首先你需要构建插件:只需要在 `halo-plugin-hello-world` 项目目录下执行 Gradle 命令
+
+```shell
+./gradlew build
+```
+
+或者使用 `IntelliJ IDEA` 提供的 `Gradle build` 即可完成插件项目的构建。
+
+第二步就是使用它。
+
+使用 `IntelliJ IDEA` 打开 Halo,参考 [Halo 开发环境运行](../core/run.md)。
+然后在 `src/main/resources` 下创建一个 `application-local.yaml` 文件并做如下配置:
+
+```yaml
+halo:
+ plugin:
+ runtime-mode: development
+ fixed-plugin-path:
+ # 配置为插件绝对路径
+ - /Users/guqing/halo-plugin-hello-world
+```
+
+使用此 local profile 启动 Halo:
+
+```shell
+# macOS / Linux
+./gradlew bootRun --args="--spring.profiles.active=dev,local"
+
+# Windows
+gradlew.bat bootRun --args="--spring.profiles.active=dev,win,local"
+```
+
+然后访问 `http://localhost:8090/console`
+
+在插件列表将能看到插件已经被正确启动,并且在左侧菜单添加了一个 `示例分组`,其下有一个名 `示例页面` 的菜单。
+
+
diff --git a/versioned_docs/version-2.5/developer-guide/plugin/introduction.md b/versioned_docs/version-2.5/developer-guide/plugin/introduction.md
new file mode 100644
index 0000000..43f7f41
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/plugin/introduction.md
@@ -0,0 +1,27 @@
+---
+title: 介绍
+description: 插件开发的准备工作
+---
+插件是由社区创建的程序或应用程序,用于扩展 Halo 的功能。插件在 Halo 中运行并执行一项或多项用户操作。它们允许用户根据自己的喜好扩展或修改 Halo。
+
+## 插件管理
+
+### 支持
+
+Halo 不提供对第三方应用程序的支持。作为插件的开发者,你有责任帮助插件的用户解决技术问题(issues)。
+当提交插件到 [awesome-halo](https://github.com/halo-sigs/awesome-halo) 时,
+您需要添加服务支持联系人(Support contact)。这可以是用户可以联系的电子邮件地址,也可以是网站或帮助中心的链接。
+
+### 版本控制
+
+为了保持 Halo 生态系统的健康、可靠和安全,每次您对自己拥有的插件进行重大更新时,我们建议在遵循 [semantic versioning spec](http://semver.org/) 的基础上,
+发布新版本。遵循语义版本控制规范有助于其他依赖你代码的开发人员了解给定版本的更改程度,并在必要时调整自己的代码。
+
+我们建议你的包版本从1.0.0开始并递增,如下:
+
+| Code status | Stage | Rule | Example version |
+| ----------------------------------------- | ------------- | -------------------------------------------- | --------------- |
+| First release | New product | 从 1.0.0 开始 | 1.0.0 |
+| Backward compatible bug fixes | Patch release | 增加第三位数字 | 1.0.1 |
+| Backward compatible new features | Minor release | 增加中间数字并将最后一位重置为零 | 1.1.0 |
+| Changes that break backward compatibility | Major release | 增加第一位数字并将中间和最后一位数字重置为零 | 2.0.0 |
diff --git a/versioned_docs/version-2.5/developer-guide/plugin/lifecycle.md b/versioned_docs/version-2.5/developer-guide/plugin/lifecycle.md
new file mode 100644
index 0000000..11f8a84
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/plugin/lifecycle.md
@@ -0,0 +1,37 @@
+---
+title: 生命周期
+description: 了解插件从启动到卸载的过程
+---
+
+根据[插件项目文件结构](./structure.md)所展示的 `StarterPlugin.java` 中,具有如下方法:
+
+```java
+ @Override
+ public void start() {
+ System.out.println("插件启动成功!");
+ }
+
+ @Override
+ public void stop() {
+ System.out.println("插件停止!");
+ }
+
+ @Override
+ public void delete() {
+ System.out.println("插件被删除!");
+ }
+```
+
+### 插件启动
+
+插件被安装后,只加载了插件的 `plugin.yaml`,类及其他资源文件的加载均在启动时进行。
+当插件加载完类文件并准备好启动插件后就会调用插件的 `start()` 方法,这有助于插件在启动时做一些事情,例如初始化。
+
+### 插件停止
+
+插件停止时,会删除在启动时创建的自定义资源,例如插件设置等通过 `yaml` 创建的自定义模型资源。
+插件定义的自定义模型也需要在此时清理掉。
+
+### 插件删除
+
+插件被卸载时被调用。
diff --git a/versioned_docs/version-2.5/developer-guide/plugin/manifest.md b/versioned_docs/version-2.5/developer-guide/plugin/manifest.md
new file mode 100644
index 0000000..21ec079
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/plugin/manifest.md
@@ -0,0 +1,44 @@
+---
+title: 插件资源文件
+description: 了解插件资源文件 plugin.yaml 如何配置
+---
+
+一个典型的插件资源文件 plugin.yaml 如下所示:
+
+```yaml
+ apiVersion: plugin.halo.run/v1alpha1
+ kind: Plugin
+ metadata:
+ name: hello-world
+ spec:
+ enabled: true
+ requires: ">=2.0.0"
+ author:
+ name: halo-dev
+ website: https://halo.run
+ logo: https://halo.run/logo
+ # settingName: hello-world-settings
+ # configMapName: hello-world-configmap
+ homepage: https://github.com/guqing/halo-plugin-hello-world
+ displayName: "插件 Hello world"
+ description: "插件开发的 hello world,用于学习如何开发一个简单的 Halo 插件"
+ license:
+ - name: "MIT"
+```
+
+- `apiVersion` 和 `kind`:为固定写法,每个插件写法都是一样的不可变更。
+- `metadata.name`:它是插件的唯一标识名,包含不超过 253 个字符,仅包含小写字母、数字或“-”,以字母或数字开头,以字母或数字结尾。
+- `spec.enabled`:表示是否要在安装时自动启用插件,仅在插件开发模式下有效。
+- `spec.requires`:支持的 Halo 版本,SemVer expression, e.g. ">=2.0.0"
+- `spec.author`:插件作者的名称和可获得支持的网站地址。
+- `spec.logo`:插件 logo,可以是域名或相对于项目 src/main/resources 目录的相对文件路径。
+- `spec.settingName`:插件配置表单名称,参考表单定义,不需要表单设置则可删除。
+- `spec.configMapName`:表单定义对应的值标识名, 推荐命名为 "插件名-configmap",没有配置 `settingName` 则不需要配置此项。
+- `spec.homepage`:通常为插件的 Github 仓库链接,或可联系到插件作者或插件官网或帮助中心链接等。
+- `spec.displayName`:插件的显示名称,它通常是以少数几个字来概括插件的用途。
+- `spec.description`:插件描述,用一段话来介绍插件的用途。
+- `spec.license`:插件使用的软件协议,参考:
+ todos
+
+
+
+
+
+```
+
+## 类型定义
+
+### CategoryVo
+
+
+
+```
+
+## listReply(commentName,page,size)
+
+```js
+commentFinder.listReply(commentName,page,size)
+```
+
+### 描述
+
+根据评论的 `metadata.name` 和分页参数获取回复列表。
+
+### 参数
+
+1. `commentName:string` - 评论的唯一标识 `metadata.name`。
+1. `page:int` - 分页页码,从 1 开始
+2. `size:int` - 分页条数
+
+### 返回值
+
+[#ListResult
+
+```
+
+## 类型定义
+
+### CommentVo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## 类型定义
+
+### SiteStatsVo
+
+```json title="SiteStatsVo"
+{
+ "visit": 0, // 访问数量
+ "upvote": 0, // 点赞数量
+ "comment": 0, // 评论数量
+ "post": 0, // 文章数量
+ "category": 0 // 分类数量
+}
+```
diff --git a/versioned_docs/version-2.5/developer-guide/theme/finder-apis/tag.md b/versioned_docs/version-2.5/developer-guide/theme/finder-apis/tag.md
new file mode 100644
index 0000000..315168e
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/theme/finder-apis/tag.md
@@ -0,0 +1,139 @@
+---
+title: 文章标签
+description: 文章标签 - TagFinder
+---
+
+import TagVo from "../vo/TagVo.md"
+
+## getByName(name)
+
+```js
+tagFinder.getByName(name)
+```
+
+### 描述
+
+根据 `metadata.name` 获取标签。
+
+### 参数
+
+1. `name:string` - 标签的唯一标识 `metadata.name`。
+
+### 返回值
+
+[#TagVo](#tagvo)
+
+### 示例
+
+```html
+
+```
+
+## getByNames(names)
+
+```js
+tagFinder.getByNames(names)
+```
+
+### 描述
+
+根据一组 `metadata.name` 获取标签。
+
+### 参数
+
+1. `names:List
+```
+
+## theme
+
+### 描述
+
+关于当前激活主题的信息。
+
+### 类型
+
+
Hello World!
+
+
+
+```
+
+## 安装主题
+
+目前我们已经创建好了主题的项目,但并不会直接被 Halo 识别和加载,请按照以下的步骤安装和启用主题:
+
+1. 访问 Console 管理界面,进入主题管理页面。
+2. 点击右上角 `切换主题` 按钮,在选择主题弹窗中切换到 `未安装` 页面。
+3. 找到我们刚刚创建的主题,点击安装即可。
+4. 选择刚刚安装的主题,点击右上角的 `启用` 按钮。
+
+此时 Halo 就已经成功加载并使用了该主题。然后我们访问首页 [http://localhost:8090](http://localhost:8090) 就可以看到我们刚刚编写的 `index.html` 模板渲染后的页面了。
diff --git a/versioned_docs/version-2.5/developer-guide/theme/settings.md b/versioned_docs/version-2.5/developer-guide/theme/settings.md
new file mode 100644
index 0000000..b0bb850
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/theme/settings.md
@@ -0,0 +1,135 @@
+---
+title: 设置选项
+description: 介绍主题如何定义以及使用设置选项。
+---
+
+此文档将讲解如何在主题中定义和使用设置项,如 [表单定义](../form-schema) 中所说,目前 Halo 的 Console 端的所有表单都使用了 [FormKit](https://github.com/formkit/formkit) 的方案。
+
+:::tip
+有关 FormKit 定义表单的更多信息,请参考 [表单定义](../form-schema),此文档仅针对主题中的设置项进行讲解。
+:::
+
+## 定义表单
+
+在主题中要使用设置项非常简单,只需要在主题根目录提供 `settings.yaml`,然后在 `theme.yaml` 中配置 `spec.settingName` 和 `spec.configMapName` 即可,在安装或者初始化主题的时候会自动识别并在 Console 端的主题设置中生成表单。
+
+### 示例
+
+```yaml title="theme-foo/theme.yaml" {14,15}
+apiVersion: theme.halo.run/v1alpha1
+kind: Theme
+metadata:
+ name: theme-foo
+spec:
+ displayName: 示例主题
+ author:
+ name: halo-dev
+ website: https://halo.run
+ description: 一个示例主题
+ logo: https://halo.run/logo
+ website: https://github.com/halo-sigs/theme-foo
+ repo: https://github.com/halo-sigs/theme-foo.git
+ settingName: "theme-foo-setting"
+ configMapName: "theme-foo-configMap"
+ version: 1.0.0
+ require: 2.0.0
+```
+
+:::tip
+`settingName` 和 `configMapName` 必须同时配置,且可以自定义名称,但是 `settingName` 必须和 Setting 的 `metadata.name` 一致。
+:::
+
+```yaml title="theme-foo/settings.yaml" {4}
+apiVersion: v1alpha1
+kind: Setting
+metadata:
+ name: theme-foo-setting
+spec:
+ forms:
+ - group: style
+ label: 样式
+ formSchema:
+ - $formkit: radio
+ name: color_scheme
+ label: 默认配色
+ value: system
+ options:
+ - label: 跟随系统
+ value: system
+ - label: 深色
+ value: dark
+ - label: 浅色
+ value: light
+ - $formkit: color
+ name: background_color
+ label: 背景颜色
+ value: "#f2f2f2"
+ - group: layout
+ label: 布局
+ formSchema:
+ - $formkit: radio
+ name: nav
+ label: 导航栏布局
+ value: "single"
+ options:
+ - label: 单栏
+ value: "single"
+ - label: 双栏
+ value: "double"
+```
+
+:::tip
+Setting 资源的 `metadata.name` 必须和 `theme.yaml` 中的 `spec.settingName` 一致。
+:::
+
+### 在主题模板中使用
+
+在主题模板中,需要以 `theme.config.[group].[name]` 的形式进行调用。
+
+其中:
+
+1. `group`: 即 `spec.forms[].group`,如上面示例中的 `style` 和 `layout`。
+2. `name`: 即 `spec.forms[].formSchema[].name`,如上面示例中的 `color_scheme` 和 `nav`。
+
+示例:
+
+```html
+
+
+
+```
+
+```html
+
+
+
+
+
+```
+
+其中 `@{/assets/dist/style.css}` 表示引用 `/templates/assets/dist/style.css` 文件。最终会被渲染为:
+
+```html
+
+```
+
+## API 引用
+
+以上方式仅支持在 HTML 标签中使用,且必须使用 `@{}` 包裹才能渲染为正确的路径。如果需要在非 HTML 标签中得到正确的路径,我们提供了 `#theme.assets()` API。
+
+:::info 注意
+需要注意的是,调用 `#theme.assets()` 的时候,资源地址不需要添加 `/assets/`。
+:::
+
+比如我们需要在 JavaScript 中异步获取一些资源:
+
+```html {3}
+
+```
+
+:::info 提示
+关于在 JavaScript 中使用 Thymeleaf 语法可以参考 Thymeleaf 官方文档:[JavaScript inlining](https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#javascript-inlining)
+:::
diff --git a/versioned_docs/version-2.5/developer-guide/theme/structure.md b/versioned_docs/version-2.5/developer-guide/theme/structure.md
new file mode 100644
index 0000000..ac5efe9
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/theme/structure.md
@@ -0,0 +1,33 @@
+---
+title: 目录结构
+description: 主题的目录结构介绍
+---
+
+Halo 2.0 的主题基本目录结构如下:
+
+```bash title="~/halo2-dev/themes/my-theme"
+my-theme
+├── templates/
+│ ├── assets/
+│ │ ├── css/
+│ │ │ └── style.css
+│ │ └── js/
+│ │ └── main.js
+│ ├── index.html
+│ ├── post.html
+│ ├── page.html
+│ ├── tag.html
+│ ├── tags.html
+│ ├── category.html
+│ ├── categories.html
+│ └── archives.html
+├── theme.yaml
+└── settings.yaml
+```
+
+详细说明:
+
+1. `/templates/` - 主题模板目录,存放主题模板文件,所有模板都需要放在这个目录。关于模板的详细说明,请查阅 [模板路由](./template-route-mapping)。
+2. `/templates/assets/` - 主题静态资源目录,存放主题的静态资源文件,目前静态资源文件只能放在这个目录,引用方式请查阅 [静态资源](./static-resources)。
+3. `/theme.yaml` - 主题配置文件,配置主题的基本信息,如主题名称、版本、作者等。详细文档请查阅 [配置文件](./config)。
+4. `/settings.yaml` - 主题设置定义文件,配置主题的设置项表单。详细文档请查阅 [设置选项](./settings)。
diff --git a/versioned_docs/version-2.5/developer-guide/theme/template-route-mapping.md b/versioned_docs/version-2.5/developer-guide/theme/template-route-mapping.md
new file mode 100644
index 0000000..95b0ddc
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/theme/template-route-mapping.md
@@ -0,0 +1,87 @@
+---
+title: 模板路由
+description: 本文档介绍路由与模板的映射关系,以及自定义模板。
+---
+
+此文档讲解系统内部提供的路由与模板映射。
+
+## 主要模板
+
+### index.html
+
+站点的首页模板,访问地址为 `/`。
+
+### post.html
+
+文章详情页面的模板,访问地址默认为 `/archives/:slug`。
+
+### page.html
+
+独立页面详情的模板,访问地址默认为 `/:slug`。
+
+### archives.html
+
+文章归档页面的模板,访问地址包括:
+
+- `/archives`
+- `/archives/:year`
+- `/archives/:year/:month`
+
+### tags.html
+
+标签集合页面的模板,访问地址默认为 `/tags`。
+
+### tag.html
+
+标签归档页面的模板,访问地址默认为 `/tags/:slug`。
+
+### categories.html
+
+分类集合页面的模板,访问地址默认为 `/categories`。
+
+### category.html
+
+分类归档页面的模板,访问地址默认为 `/categories/:slug`。
+
+## 自定义模板 {#custom-templates}
+
+一般情况下,上文提到的模板已经能够满足大部分的需求,但如果需要针对某个特定的页面进行自定义,可以通过自定义模板来实现。目前系统支持为 **文章**、**独立页面**和**分类归档** 设置自定义模板:
+
+在 `theme.yaml` 的 `spec` 节点下添加如下配置:
+
+```yaml
+customTemplates:
+ {type}:
+ - name: {name}
+ description: {description}
+ screenshot: {screenshot}
+ file: {file}.html
+```
+
+示例:
+
+```yaml
+customTemplates:
+ post:
+ - name: 文档
+ description: 文档类型的文章
+ screenshot:
+ file: post_documentation.html
+```
+
+字段说明:
+
+- `type`:模板类型,目前支持 `post` `page` `category`。
+- `name`:模板名称
+- `description`:模板描述
+- `screenshot`:模板预览图
+- `file`:模板文件名,需要在 `/templates/` 目录下创建
+
+最终使用者即可在文章设置、独立页面设置、分类设置中选择自定义模板。
+
+:::info 提示
+
+1. 自定义模板与默认模板的功能相同,区别仅在于可以让使用者选择不同于默认模板风格的模板。
+2. 自定义模板的文件名需要以 `.html` 结尾,且需要在 `/templates/` 目录下创建。
+
+:::
diff --git a/versioned_docs/version-2.5/developer-guide/theme/template-tag.md b/versioned_docs/version-2.5/developer-guide/theme/template-tag.md
new file mode 100644
index 0000000..1791921
--- /dev/null
+++ b/versioned_docs/version-2.5/developer-guide/theme/template-tag.md
@@ -0,0 +1,57 @@
+---
+title: 自定义标签
+description: 本文档介绍 Halo 为模板引擎提供的专有标签。
+---
+
+Halo 为满足部分代码注入和模板扩展点的需求,提供了一些专有标签,本文档将列出已支持的标签以及介绍这些标签的使用方法。
+
+## halo:comment
+
+### 描述
+
+此标签用作评论组件的扩展点,如果有插件实现了这个扩展点,那么将在编写了此标签的模板中显示插件提供的内容。
+
+### 使用示例
+
+```html title="/templates/post.html"
+
+
+
+
+
+```
+
+```html title="/templates/category-tree.html"
+
+
+```
+
+### _templateId
+
+#### 变量值
+
+`categories`
+
+## 类型定义
+
+### CategoryTreeVo
+
+
+
+
+```
+
+### _templateId
+
+#### 变量值
+
+`tags`
+
+## 类型定义
+
+### TagVo
+
+
+
+
+
+
+
+
+
+官网
+文档
+社区
+Gitee
+Telegram 频道
+
+
+## 状态
+
+
diff --git a/versioned_docs/version-2.5/user-guide/attachments.md b/versioned_docs/version-2.5/user-guide/attachments.md
new file mode 100644
index 0000000..0baf9c5
--- /dev/null
+++ b/versioned_docs/version-2.5/user-guide/attachments.md
@@ -0,0 +1,102 @@
+---
+title: 附件
+description: 附件管理相关功能说明
+---
+
+## 存储策略
+
+为了能够更加灵活地管理附件的存储位置,Halo 提供了存储策略的概念。
+
+Halo 中支持多种类型的存储策略,你可以通过安装插件的方式对支持的存储策略类型进行扩展。一个存储策略包含了存储提供者,具体存储位置等使用该类型存储所必要的各种信息。
+
+你可以点击附件页面右上角的 `存储策略` 按钮对存储策略进行管理。
+
+
+
+### 新建存储策略
+
+点击存储策略列表右上方的 `+` 添加按钮即可新建一个存储策略。
+
+
+
+添加时首先需要选择一种存储策略类型,系统内置的存储策略为本地存储,图中的 `Aliyun OSS` 阿里云的 OSS 对象存储由[该插件](https://github.com/halo-sigs/plugin-alioss)提供。
+
+
+添加一个本地存储时,你需要输入名称及存储位置信息。其中的存储位置决定了使用该存储策略的附件,在服务器上的实际存储路径,路径规则为 `{Halo 工作目录}/attachments/{存储位置}`,其中的 Halo 工作目录由安装时指定的参数决定,默认为 `~/.halo2`。
+:::info
+默认的 Docker 部署方式,实际存储位置由挂载到 Halo 容器工作目录的服务器目录所决定。
+:::
+
+### 删除存储策略
+
+点击存储策略列表指定存储所在行后方的 `···` 更多操作按钮即可对该存储策略进行编辑或删除。
+
+
+:::info
+为了保护附件安全避免用户误操作,当存储策略下存在附件时,该存储策略不允许删除。如果确定要删除某个存储策略及该存储策略中的所有附件,可以先按照存储策略对附件进行筛选,先批量删除存储策略下的所有附件,再删除存储策略。
+:::
+
+## 附件分组
+
+通过附件分组功能可以方便地将同一类型、同一用途的附件划分到一个分组中,方便后续附件的管理和插件。
+
+附件所使用的存储策略决定了附件的实际存储位置和 URL 规则,而附件分组功能仅是逻辑上的归类划分,不会影响附件的存储位置及 URL。
+
+### 新建分组
+
+点击附件列表上方的 `添加分组` 按钮即可新建一个分组。
+
+
+
+### 删除分组
+
+点击附件列表上方指定分组上的 `···` 更多按钮,可以对分组进行重命名或删除操作。
+
+Halo 目前提供了两种分组删除策略:
+
+1. **删除并将附件移动至未分组**:分组被删将被删除,分组下的附件移动到未分组中;
+2. **删除并同时删除附件**:先删除下的所有附件后,再删除该分组。
+:::warning
+当使用 `删除并同时删除附件` 方式时,分组下的所有附件会被同时删除且不可恢复、无法找回,请谨慎进行该操作。
+:::
+
+## 上传附件
+
+点击附件列表右上方的 `上传` 按钮即可上传新的附件到 Halo。
+:::info
+附件会被上传到当前选中的分组中,如果选择的是 `全部` 附件,则附件会被默认上传到 `未分组` 中。
+:::
+
+
+
+上传附件时你需要先选择一个存储策略,后续上传的附件将会存储在选中的存储策略中。
+
+你可以点击 `浏览` 或 `我的设备` 图标唤起本地文件管理器进行文件选择,也可以直接将文件拖拽到待上传文件区域中。
+
+
+
+如上图所示,你可以同时添加多个文件一次性完成多个附件的上传。
+
+## 查看附件
+
+点击附件列表中的某一个附件即可查看该附件的详细信息。
+:::info
+对于存储策略类型为本地存储的附件,详细信息中的的原始链接生成规则为 `/upload/{存储策略存储路径}/{文件名称}`。
+:::
+
+## 删除附件
+
+附件页面提供两种浏览模式,列表模式和平铺模式。
+
+在平铺模式下,你可以点击附件缩略图右上角的 `√` 图标选中若干个附件,通过上方的批量操作按钮删除选中的附件。
+
+
+在列表模式下,你可以点击指定附件所在行后方的 `···` 更多按钮,对附件进行删除操作。
+
+:::warning
+附件删除后不可恢复、无法找回,请谨慎进行该操作。
+:::
+
+## 移动附件所在分组
+
+与批量删除操作类似,你可以选中多个附件后在上方的批量操作按钮中选择 `移动` 操作,将所选附件移动到指定的分组中。
diff --git a/versioned_docs/version-2.5/user-guide/backup-migration.md b/versioned_docs/version-2.5/user-guide/backup-migration.md
new file mode 100644
index 0000000..05d8713
--- /dev/null
+++ b/versioned_docs/version-2.5/user-guide/backup-migration.md
@@ -0,0 +1,38 @@
+---
+title: 备份迁移
+description: 关于备份和迁移的最佳实践
+---
+
+:::info
+在开始之前,我们推荐你先阅读 [《写在前面》](/getting-started/prepare) 的名词解释部分。
+:::
+
+## 备份
+
+### 数据备份
+
+目前 Halo 在后台的小工具中提供了数据导出的功能,此功能的作用为导出数据库的所有数据,格式为 `JSON`。通常可以作为切换数据库类型的时候使用。需要注意的是,此备份仅仅为备份数据,不包含其他诸如主题、附件等资料。如下图:
+
+
+
+点击右下角的备份按钮即可导出所有数据,之后点击备份文件的标题即可下载。
+
+### 整站备份
+
+通过 [《写在前面》](/getting-started/prepare) 的名词解释部分我们可以知道,Halo 的所有数据都是存放在当前用户目录的工作目录(.halo)下的(使用 MySQL 数据库除外,你还需要导出 MySQL 数据)。**所以我们备份整站的数据仅需备份这个目录即可**,不管你使用何种方式。不过,为了操作方便,我们也在后台的小工具中提供了备份整站数据的功能,和上面所说的数据备份一致,点击备份按钮即可打包工作目录文件夹。如下图:
+
+
+
+## 迁移
+
+### 导入数据
+
+此功能为导入上面所说的数据备份产生的数据文件(JSON 格式),并非整站备份的工作目录文件。需要注意的是,此功能仅在站点初始化的时候支持。如下图:
+
+
+
+上传文件之后,点击导入即可。
+
+### 整站迁移
+
+此操作通常用于迁移服务器,基于上面 **整站备份** 所说,Halo 的所有数据都是存放于当前用户目录的工作目录(.halo)下的。当然,这仅限于使用 **H2 Database** 的情况下,如果你使用的 MySQL,那么还需要手动导出 MySQL 数据。所以,我们迁移服务器仅仅需要将工作目录的备份文件上传到新服务器的用户目录下解压,然后按照 [《安装指南》](/getting-started/install/linux) 重新安装即可。MySQL 用户还需要做的就是手动导出 MySQL 数据,并在新服务器上导入。
diff --git a/versioned_docs/version-2.5/user-guide/common.md b/versioned_docs/version-2.5/user-guide/common.md
new file mode 100644
index 0000000..1268327
--- /dev/null
+++ b/versioned_docs/version-2.5/user-guide/common.md
@@ -0,0 +1,72 @@
+---
+title: 基础说明
+description: Halo 中的基本概念说明
+---
+Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。
+
+为了更好地发挥出 Halo 的价值,这里有一些基本概念需要你进行了解。
+
+## 控制台
+
+控制台是一个 Halo 站点的后台管理系统,只有具有权限的登录用户才可以正常使用控制台功能。你可以在控制台中管理站点中的文章、页面、附件等各种内容,调整站点使用的主题或各种设置。
+
+:::info
+控制台默认地址为 `$HALO_EXTERNAL_URL/console/`。忘记密码请参考[常见问题中的忘记密码章节](../user-guide/faq.md#忘记密码怎么办)进行处理。
+:::
+
+### 界面说明
+
+
+
+1. **全局搜索框**:点击或通过快捷键 `Ctrl+K` 可以呼出全局搜索框,输入关键字可以在所有文章、页面、附件、用户及设置项等所有内容中进行全局搜索;
+2. **侧边导航栏**:对控制台提供的功能进行导航,点击导航栏条目会在页面右侧显示对应功能页面。安装某些插件可能会扩展导航栏条目;
+3. **用户信息展示及操作**:展示当前登录用户的头像、名称及角色等信息,`···` 中提供更多用户相关操作;
+4. **功能页面标题**: 当前所在的功能页面标题;
+5. **功能页面操作区域**:当前所在功能页面提供的功能操作按钮;
+6. **功能页面主体**: 当前所在功能页面的主体显示区域,显示内容及形式视具体页面功能而定。
+
+## 文章
+
+文章是 Halo 中的核心概念之一。一篇文章主要由纯文本的文章标题和富文本的文章内容构成,除此之外你还可以为文章设置所属分类、添加标签、设置封面图等。
+
+在不同的站点类型不同的应用场景中,文章的实际含义也会有所区别,它可以代表一则公司新闻、一篇博客或者产品文档中的某一章节。
+
+## 页面
+
+Halo 中存在两种类型的页面,`功能页面` 和 `自定义页面`。
+
+### 功能页面
+
+功能页面通常由各个插件提供,页面功能及在控制台呈现的内容由具体提供该页面的插件决定。
+
+### 自定义页面
+
+自定义页面与文章类似,同样包含页面标题和富文本形式的页面内容。与文章不同的是自定义页面无法设置所属分类和标签信息,一般用于站点中单一展示功能的页面,例如常见的站点关于页面、联系我们页面等。
+
+## 分类
+
+通过分类可以更好的组织管理文章。分类之间存在层级关系,一个父分类下可包含多个子分类。一篇文章可以同时属于多个分类。
+
+## 标签
+
+标签可以用于为文章添加特定标记,与分类不同的是标签之间没有层级关系。一篇文章也可以同时添加多个标签。
+
+## 附件
+
+由用户上传的,供文章、主题设置等各个地方引用的文件。多用于文章配图、主题配图、用户头像等场景。
+
+## 主题
+
+包含了各种站点页面模板的资源包。用户访问 Halo 站点浏览到的内容及样式,由 Halo 管理端所配置使用的主题所决定。
+
+:::info
+当前 Halo 支持的主题可在[Awesome Halo](https://github.com/halo-sigs/awesome-halo)仓库查看。
+:::
+
+## 插件
+
+用于扩展 Halo 功能的软件包。插件独立于 Halo 核心应用,可以单独安装、升级、卸载。
+
+:::info
+当前 Halo 支持的插件可在[Awesome Halo](https://github.com/halo-sigs/awesome-halo)仓库查看。
+:::
diff --git a/versioned_docs/version-2.5/user-guide/config.md b/versioned_docs/version-2.5/user-guide/config.md
new file mode 100644
index 0000000..a65bc7b
--- /dev/null
+++ b/versioned_docs/version-2.5/user-guide/config.md
@@ -0,0 +1,172 @@
+---
+title: 功能配置
+description: 系统功能的相关配置说明
+---
+
+## 修改博客地址
+
+很多人在部署完成之后都会惊奇的发现,博客前台居然没有样式?究其原因就是无法获取到静态资源,那么为什么获取不到呢?那就是你的博客地址没有设置正确。
+
+第一步:
+
+登录到后台之后,进入 博客设置 -> 常规设置。
+
+第二步:
+
+修改你的博客地址:
+
+- 如果你没有进行域名解析或者没有配置反向代理,那么博客地址一般为 `http://ip:端口`。
+
+- 如果你进行了域名解析且配置了反向代理,但是没有配置 SSL 证书,那么博客地址一般为 `http://域名`。
+
+- 如果你进行了域名解析、配置了反向代理、也配置了 SSL 证书,那么博客地址一般为 `https://域名`。
+
+说了这么多,就是希望你别把 `http://` 或者 `https://` 搞混了。
+
+另外,需要注意的是,地址尾部不需要 `/`。
+
+## 注册 Gravatar
+
+很多人反映评论中自己的头像不显示,其实评论部分调用的头像并不是在个人资料中设置的那个,而是 `Gravatar`。所以这一点怪我,从 Halo 发布至今我都没有说明这个事情。
+
+至于什么是 `Gravatar`,引用 `Gravatar` 官方的说明:`全球公认的头像`。这可不是在吹牛,因为只要接入了 Gravatar 的网站,你在网站上使用在 Gravatar 注册的邮箱之后,都会显示你设置的头像,而不需要额外设置。比较出名的网站有 `GitHub`,`GitLab`,`V2ex` 等。所以点击
+ is maintained by the
+
+ W3C
+
+ .
+Halo
+```
+
+```html
+
+```
+
+```html
+https://halo.run
+```
+
+## Emoji
+
+支持将 Emoji 的文字形式转化为图片形式。
+
+示例:
+
+```markdown
+:100:
+```
+
+渲染结果:
+
+```html
+💯
+```
+
+## 脚注(Footnote)
+
+语法规则:
+
+```markdown
+[^脚注名]
+[^脚注名]: 脚注内容
+```
+
+示例:
+
+```html
+驿外[^1]断桥边,寂寞开无主。已是黄昏独自愁,更着风和雨
+[^1]: 驿(yì)外:指荒僻、冷清之地。驿,驿站。
+```
+
+渲染结果:
+
+```html
+
+
+
+
+
+
+
+
+ Some nice text +
++ Some even nicer text +
+``` + +## 任务列表(Task Lists) + +示例: + +```markdown +- [x] Apple +- [ ] Banana +``` + +渲染结果: + +```html +