5

我正在评估 Contentful.com 作为 Angular SPA 的内容引擎。

我面临的问题是按内容类型检索条目(例如获取所有“博客”类型的条目)。如文档示例中所述,这是按如下方式完成的:

/spaces/spaceid/entries?access_token=token&content_type= cat

所以在我的情况下,而不是“猫”,content_type="blog" 或 content_type="news" 将是我期望的交互方式。

我面临的现实是,通过 content_type 检索内容不允许我使用我的内容类型的名称 - 它需要 ID 这是一个丑陋的 GUID,所以我的查询看起来像这样:

/spaces/spaceid/entries?access_token=token&content_type= 2wKn6yEnZewu2SCCkus4as

这样做的麻烦在于:

  • 对开发人员不友好
  • 不可跨环境移植(即测试空间和生产空间)

目前我能看到的唯一解决方案是在页面加载时预先检索内容类型到 id 的映射并使用它——但这对性能来说不会那么好。

该文档似乎总是使用友好可读的内容类型 ID(例如 cat),但这不是我的经验。

所以,要解决这个问题,有没有:

  1. 一种将内容类型设置为具有友好 ID 的方法?或者
  2. 一种使用不同的查询参数按名称检索条目的方法?
4

4 回答 4

3

我曾经有同样的问题,基本上是为了预检索内容类型而运行,然后创建一个将名称转换为 if 的小地图。性能还不错,因为在应用程序启动时只执行一次。Contentful 还使用 CDN,这使得响应几乎是即时的。

无论如何,这是个好消息:虽然你不能通过 Contentful 的用户界面定义内容类型的 ID,但你完全可以通过他们的 API 来做到这一点,比如 curl(你也可以使用各种 SDK):

curl -H 'Authorization: Bearer <access-token>' \ 
  -X PUT \
  -d '{"name": "Blog", "fields": [{"name":"Name","id":"name","type":"Symbol"}]}' \
  https://api.contentful.com/spaces/<spaceId>/content_types/blog

这将创建一个 ID 为“blog”的内容类型,其中包含一个字段“name”。一旦您创建了这样的内容类型,您也可以转到用户界面并向其添加更多字段。

于 2015-09-03T04:41:56.337 回答
0

如果您在 Web 应用程序中访问内容类型的页面,请检查 url 的末尾。它应该看起来像:

content_types/yourContentType

在这种情况下,yourContentType 是您可以使用的 id(这是您在文档中看到的)。我花了一段时间才在文档中找到这个,肯定会更明显。

于 2016-05-04T20:59:13.217 回答
0

您实际上可以使用 SDK 创建具有指定 id 的 contentType。您必须createContentTypeWithId使用ContentfulSpaceAPI.

它的签名看起来像

* @property {function(id: string, data: {name: string, fields: Array}): Promise<ContentType>} createContentTypeWithId - creates a ContentType with a specified id
于 2017-04-19T02:41:27.540 回答
0

这不再是这种情况,您可以使用以下类型的查询检索特定内容类型的所有条目:

options = {
    include: 10,
    limit: 1000,
    order: "fields.publishDate",
    "fields.tags[in]": title_case_filter,
    content_type: "blog"
  };

在这种情况下,“blog”是创建内容类型时分配的 contentType id。

于 2019-06-18T00:42:22.640 回答