我正在评估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),但这不是我的经验。
所以,要解决这个问题,那就是:
答案 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。