0

我需要制作一些可共享的博客文章 URL。要做到这一点,URL 必须类似于webpage.com/blog-post-title。它不能是webpage.com/5GFd5GDSg2345WD。

由于我使用的是动态路由,因此我需要使用 URL 上的内容来获取内容条目。不应该有任何查询,因为查询是丑陋的并且降低了可共享性,例如webpage.com/blog-post-title?query=queriesAreUgly。

不幸的是,我需要 entryId 来获取条目。同样不幸的是,entryId 都非常难看,因此完全无用/不可用。我希望我可以设置自己的 entryId,但由于神秘的原因,这似乎是不可能的。

我可以制作一个将 URL 与 entryIds 配对的查找表,但我将把这个内容丰富的项目交给不懂技术的人,他们不应该管理查找表。

我可以获取所有博客条目,然后按博客标题进行过滤,但是,很明显,这是低效的,因为我会无缘无故地加载数千行文本。

我可以创建自己的后端 API 并自己完成所有这些工作,但这也是一个糟糕的解决方案,因为这会花费太多时间,而且我无法将其提供给我的非技术客户。

这个问题似乎没有解决方案,这是由 Contentful 固有的不必要的不​​灵活造成的。

使其工作的唯一有效方法是不通过其 ID 而是通过其字段之一来查找条目。有没有一种高效/高效的方法来做到这一点,还是我只需要过滤每一篇博文,直到找到标题正确的博文?

4

1 回答 1

1

在博客文章内容类型中添加一个“slug”字段怎么样,您可以使用字段设置从标题自动生成(因此您不必手动输入?)

显示可以从标题字段生成其值的 slug 字段选项的屏幕截图

然后,您可以过滤查询中的 slug 字段。

如果您使用的是 JavaScript SDK(听起来很像),您可以使用getEntries()并按 slug 字段进行过滤以获取单个博客文章。像这样:

import { createClient } from "contentful";

const client = createClient({
  space: {SPACE_ID},
  accessToken: {ACCESS_TOKEN},
});

const response = await client
  .getEntries({
    content_type: "blogPost",
    limit: 1,
    "fields.slug": "blog-post-title",
  })
  .then((entry) => entry)
  .catch(console.error);
于 2021-11-25T08:39:43.523 回答