Umbraco & Astro
Umbraco CMS 是一个开源的 ASP.NET Core CMS。默认情况下,Umbraco 使用 Razor 页面作为其前端,但也可以作为无头 CMS 使用。
与 Astro 集成
段落标题 与 Astro 集成在本节中,你将使用 Umbraco 的原生 Content Delivery API 为你的 Astro 项目提供内容。
前提条件
段落标题 前提条件要开始,你需要具备以下条件:
- 一个 Astro 项目 - 如果你还没有 Astro 项目,我们的 安装指南 将帮助你快速启动和运行。
- 一个 Umbraco(v12+)项目 - 如果你还没有 Umbraco 项目,请参阅这个 安装指南。
设置 Content Delivery API
段落标题 设置 Content Delivery API要启用 Content Delivery API,请更新你的 Umbraco 项目的 appsettings.json
文件:
你可以根据需要配置额外的选项,如公共访问、API 密钥、允许的内容类型、会员授权等。更多信息请参见 Umbraco Content Delivery API 文档。
获取数据
段落标题 获取数据使用 fetch()
调用 Content Delivery API 来访问你的内容,并使其可用于你的 Astro 组件。
下面的示例展示了获取的文章列表,包括文章日期和内容等属性。
使用 Umbraco 和 Astro 构建博客
段落标题 使用 Umbraco 和 Astro 构建博客前提条件
段落标题 前提条件-
一个 Astro 项目 - 如果你还没有 Astro 项目,我们的 安装指南 将帮助你快速启动和运行。
-
一个启用了 Content Delivery API 的 Umbraco 项目(v12+) - 遵循这个 安装指南 来创建一个新项目。
在 Umbraco 中创建博客文章
段落标题 在 Umbraco 中创建博客文章从 Umbraco 后台 创建一个简单博客文章的文档类型,命名为 ‘Article’。
-
为你的 ‘Article’ 文档类型配置以下属性:
- Title (DataType: Textstring)
- Article Date (DataType: Date Picker)
- Content (DataType: Richtext Editor)
-
将 ‘Article’ 文档类型的 “Allow as root” 选项设置为
true
。 -
在 Umbraco 后台的 “Content” 部分,创建并发布你的第一篇博客文章。你可以重复这个过程多次。
想了解更多信息,请观看创建文档类型的视频指南。
在 Astro 中展示博客文章列表
段落标题 在 Astro 中展示博客文章列表创建一个 src/layouts/
文件夹,然后添加一个新文件 Layout.astro
,内容如下:
你的项目现在应该包含以下文件:
文件夹src/
文件夹layouts/
- Layout.astro
文件夹pages/
- index.astro
要创建博客文章列表,首先使用 fetch
调用 Content Delivery API 的 content
端点,并按 ‘article’ 的 contentType 进行筛选。文章对象将包括在 CMS 中设置的属性和内容。然后,你可以遍历这些文章,并显示每个标题及其文章的链接。
将 index.astro
的默认内容替换为以下代码:
生成单个博客文章
段落标题 生成单个博客文章在 /pages/
目录的根部创建文件 [...slug].astro
。此文件将用于动态生成单个博客页面。
请注意,生成页面 url 路径的 params
属性包含来自 API 获取的 article.route.path
。同样,props
属性必须包含整个 article
,以便你可以访问 CMS 条目中的所有信息。
添加以下代码到 [...slug].astro
,它将创建你的单个博客文章页面:
你的项目现在应该包含以下文件:
文件夹src/
文件夹layouts/
- Layout.astro
文件夹pages/
- index.astro
- […slug].astro
在开发服务器运行时,你现在应该能够在你的 Astro 项目的浏览器预览中查看由 Umbraco 创建的内容。恭喜你!🚀
发布你的网站
段落标题 发布你的网站要部署你的网站,请访问我们的部署指南并按照你选择的托管提供商的指示进行操作。
本地开发、HTTPS 和自签名 SSL 证书
段落标题 本地开发、HTTPS 和自签名 SSL 证书如果你在本地使用 Umbraco 的 HTTPS 端点,任何 fetch
查询都会因为代码 DEPTH_ZERO_SELF_SIGNED_CERT
而导致 fetch failed
。这是因为 Node(Astro 的基础)默认不接受自签名证书。为了避免这种情况,请在本地开发中使用 Umbraco 的 HTTP 端点。
或者,你可以在 env.development
文件中设置 NODE_TLS_REJECT_UNAUTHORIZED=0
并按如下方式更新 astro.config.js
:
此方法在这篇博客文章中有更详细的描述,展示了如何为自签名证书配置你的项目,附带一个相关的仓库。
官方文档
段落标题 官方文档社区资源
段落标题 社区资源- 使用 Content Delivery API 构建性能卓越的 Astro 网站 - Louis Richardson
- 从 Umbraco 的 Content Delivery API 生成 TypeScript OpenAPI 客户端 - Rick Butterfield
- 使用 Azure 和 CloudFlare 免费构建 Jamstack - Kenn Jacobsen
- 使用 Astro 和 Umbraco 快速搭建博客 - Kenn Jacobsen
- 演讲:烘焙,但不油炸 - Astro 与 Content Delivery API - Adam Prendergast