有没有办法查询结果只显示已发布且不处于草稿状态的数据?我查看了文档并没有找到它。
这是我目前拥有的:
export const getAllPages = async (context?) => {
const client = createClient({
space: process.env.CONTENTFUL_SPACE_ID,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
});
const pages = await client.getEntries({
content_type: "page",
include: 10,
"fields.slug[in]": `/${context.join().replace(",", "/")}`,
});
return pages?.items?.map((item) => {
const fields = item.fields;
return {
title: fields["title"],
};
});
};
您可以检测到您获取的条目处于已发布状态:
function isPublished(entity) {
return !!entity.sys.publishedVersion &&
entity.sys.version == entity.sys.publishedVersion + 1
}
就您而言,我会同时查找 Published 和 Changed:
function isPublishedChanged(entity) {
return !!entity.sys.publishedVersion &&
entity.sys.version >= entity.sys.publishedVersion + 1
}
查看文档:
https://www.contentful.com/developers/docs/tutorials/general/define-entry-asset-state/
要仅获取已发布的数据,您需要使用 Content Delivery API 令牌。如果您使用内容预览 API 令牌,您将收到已发布的条目和草稿条目。
您可以在这里阅读更多相关信息:https://www.contentful.com/developers/docs/references/content-delivery-api/
如果使用 Content Delivery API,您需要过滤每个项目的
sys.revision
属性。已发布项目的 revision
属性应设置为大于 0
。
const publishedItems = data.items.filter(item => item.sys.revision > 0)
已编辑:使用 Content Delivery API 的正确方法
async function getData() {
const res: any = await client.getEntries(
{
content_type: <content_type>,
'sys.revision[gt]': '0' // only published items
}
)
if (res.sys.type === 'Error') {
throw new Error(res.sys.message)
}
return res.items
}