contentful getEntries 仅发布数据

问题描述 投票:0回答:3

有没有办法查询结果只显示已发布且不处于草稿状态的数据?我查看了文档并没有找到它。

这是我目前拥有的:

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"],
    };
  });
};
contentful
3个回答
1
投票

您可以检测到您获取的条目处于已发布状态:

function isPublished(entity) {
  return !!entity.sys.publishedVersion &&
    entity.sys.version == entity.sys.publishedVersion + 1
}

就您而言,我会同时查找 PublishedChanged:

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/


0
投票

要仅获取已发布的数据,您需要使用 Content Delivery API 令牌。如果您使用内容预览 API 令牌,您将收到已发布的条目和草稿条目。

您可以在这里阅读更多相关信息:https://www.contentful.com/developers/docs/references/content-delivery-api/


0
投票

如果使用 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
}
  • (不平等)[https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/search-parameters/ranges/query-entries/console/js]
  • (参见表中的修订属性)[https://www.contentful.com/developers/docs/references/content-delivery-api/#/introduction/common-resource-attributes]
© www.soinside.com 2019 - 2024. All rights reserved.