无头 Statamic & Astro
Statamic 是一个现代化的、基于文件的 CMS。它允许开发者轻松创建动态网站和应用程序,同时为内容编辑者提供直观易用的内容管理界面。
与 Astro 集成
标题为 “与 Astro 集成” 的部分Statamic 内置了 REST API 和 GraphQL API,可将你的数据连接到 Astro。
先决条件
标题为 “先决条件” 的部分要开始,你需要具备以下条件
- REST API 和 GraphQL API 仅在 Statamic 专业版中可用。你可以在你的本地计算机上免费试用专业版。
- 一个 Astro 项目 - 如果你还没有 Astro 项目,我们的安装指南将帮助你快速启动并运行。
- 一个 Statamic 网站 - 如果你需要一个 Statamic 网站,本指南将帮助你入门。请记得通过在
.env
文件中添加STATAMIC_API_ENABLED=true
或STATAMIC_GRAPHQL_ENABLED=true
来启用 REST API 或 GraphQL API,并在 API 配置文件中启用所需的资源。
所有示例都假定你的网站有一个名为 posts
的集合,该集合有一个名为 post
的蓝图,并且此蓝图有一个标题字段(字段类型为文本)和内容字段(字段类型为 markdown)。
获取数据
标题为 “获取数据” 的部分如果你在本地计算机上使用 Statamic 和 Astro,请记住在获取 API 时使用 127.0.0.1
而不是 localhost
。
从 Astro 服务器请求时,localhost
不会像在浏览器中那样正确解析,任何对任一 API 的请求都会失败。
REST API
标题为 “REST API” 的部分从你网站的 REST API URL 获取 Statamic 数据。默认情况下,它是 https://[你的网站]/api/
。然后,你可以使用 Astro 的 set:html={}
指令来渲染你的数据属性。
例如,要显示所选集合中的标题列表及其内容
---const res = await fetch("https://[YOUR-SITE]/api/collections/posts/entries?sort=-date")const posts = await res.json()---<h1>Astro + Statamic 🚀</h1>{ posts.map((post) => ( <h2 set:html={post.title} /> <p set:html={post.content} /> ))}
GraphQL
标题为 “GraphQL” 的部分使用你网站的 GraphQL API URL 获取 Statamic 数据。默认情况下,它是 https://[你的网站]/graphql/
。然后,你可以使用 Astro 的 set:html={}
指令来渲染你的数据属性。
例如,要显示所选集合中的标题列表及其内容
---const graphqlQuery = { query: ` query Entries($page: Int, $locale: String) { entries( collection: "posts" sort: "date asc" limit: 20 page: $page filter: { locale: $locale } ) { current_page has_more_pages data { title ... on Entry_Posts_Post { content } } } } `, variables: { page: page, locale: locale, },};
const res = await fetch("https://[YOUR-SITE]/graphql", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(graphqlQuery),})
const { data } = await res.json();const entries = data?.entries;---<h1>Astro + Statamic 🚀</h1>{ entries.data.map((post) => ( <h2 set:html={post.title} /> <p set:html={post.content} /> ))}
发布你的站点
标题为 “发布你的网站” 的部分要部署你的 Astro 网站,请访问我们的部署指南,并按照你首选的托管提供商的说明进行操作。