使用Contentful检索内容类型的更为方便的方法

时间:2015-09-03 00:21:36

标签: contentful

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

我面临的问题是按内容类型检索条目(例如,获取类型为&#34的所有条目;博客")。如documentation example中所述,这可以通过以下方式完成:

  

/空间/ spaceid /条目的access_token =令牌安培; CONTENT_TYPE =

所以在我的情况下而不是" cat",content_type =" blog"或content_type =" news"将是我期待互动的方式。

我面临的现实是,通过content_type检索内容并不能让我使用我的内容类型的名称 - 它希望ID是一个丑陋的GUID,所以我的查询看起来像这样: / p>

  

/空间/ spaceid /条目的access_token =令牌安培; CONTENT_TYPE = 2wKn6yEnZewu2SCCkus4as

这样做的麻烦是:

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

目前我能看到的唯一解决方案是在页面加载时预先检索内容类型到id映射并使用它 - 但它对性能的影响不大。

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

所以,要解决这个问题,那就是:

  1. 设置内容类型以获得友好ID的方法?或
  2. 使用不同的查询参数按名称检索条目的方法吗?

4 个答案:

答案 0 :(得分:3)

我曾经有过相同的问题,基本上是为了预先检索内容类型,然后创建一个将名称转换为if的小地图。性能并不是太糟糕,因为在应用程序启动时只执行一次。此外,Contentful使用CDN使响应几乎立即生效。

无论如何,这是一个好消息:虽然您无法通过Contentful的用户界面定义内容类型的ID,但您可以通过curl(也可以使用各种SDK)通过其API完全实现这一点:

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”。一旦您创建了这样的内容类型,您也可以转到用户界面并向其添加更多字段。

答案 1 :(得分:0)

如果您访问网络应用中的内容类型页面,请检查网址的结尾。它应该看起来像:

  

CONTENT_TYPES / yourContentType

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

答案 2 :(得分:0)

您实际上可以使用SDK创建具有指定ID的contentType。您必须使用createContentTypeWithId的{​​{1}}方法。

它的签名看起来像

ContentfulSpaceAPI

答案 3 :(得分:0)

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

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

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