【问题标题】:How do I generate Eleventy and display tags from a localized version of a collection file?如何从集合文件的本地化版本生成 Eleventy 并显示标签?
【发布时间】:2022-01-22 15:54:46
【问题描述】:

我是 Eleventy 的新手,正在从事个人项目 - 大部分工作正常,但我需要帮助来根据存储在单独文件夹中的帖子生成和过滤标签(作为国际化/本地化我的网站的一部分)。

我有两个文件夹:enff。在每个文件夹中,我都有一个名为 posts 的文件夹 - 其中包含一些帖子。

我正在尝试找到一种方法来仅从 en/posts 文件夹或 fr/posts 文件夹创建一组标签 - 每个标签都将位于单独的集合中,而不是作为一个全局集合。

我目前有这个在所有页面上生成一个标签数组:

  eleventyConfig.addFilter("filterTagList", filterTagList);

  // Create an array of all tags
  eleventyConfig.addCollection("tagList", function (collection) {
    let tagSet = new Set();
    collection.getAll().forEach(item => {
      (item.data.tags || []).forEach(tag => tagSet.add(tag));
    });

    return filterTagList([...tagSet]);
  });

(filterTagList是一个单独的过滤器,排除了某些冗余标签)

我可以根据 en/posts 文件夹中名为 posts_en 的帖子创建一个集合,使用以下命令:

  eleventyConfig.addCollection("posts_en", function (collection) {
    return collection.getFilteredByGlob("./en/posts/*.md");
  });

...它可以很好地显示英文帖子。如果我将posts_en 作为标签添加到帖子中,我还能够创建一个收藏en/posts 文件夹中的帖子:

  eleventyConfig.addCollection("tagGroup", function (collection) {
    console.log(">>>> TAGGROUP:", collection.getFilteredByTags("posts_en"));
    return collection.getFilteredByTags("posts_en");
  });

(我已经检查了这段代码摘录中的 console.log 语句 - 它呈现了我用 posts_en 标记的所有帖子,但我不确定这是否也会保留其他标签?集合需要仅包含带有相应标签的英文帖子,但不包含法语内容(反之亦然,对于 FR 内容)。

我的问题是我无法将原始的 tagList 方法仅包含在 en 文件夹(或 fr 文件夹)中的帖子。

我尝试将 tagList 更改为 tagList_en,并调整 collection.getAll() 以仅引用 posts_en 集合 - 已编译,但在我的标签页面上给出的结果为零。我已经在网上搜索了 SO 和各种帖子,但到目前为止,没有任何乐趣 - 任何人都可以提供建议吗?我很高兴将解决方案从英语复制到等效的法语 - 只要我能得到适用于英语内容的东西!

【问题讨论】:

    标签: collections tags eleventy


    【解决方案1】:

    如果您的posts_en 集合按预期工作,那么应该可以通过将collection.getAll() 替换为collection.getFilteredByGlob("./en/posts/*.md") 来调整tagList 集合以仅显示来自英文帖子的标签。

    // Create an array of all tags
    eleventyConfig.addCollection("tagList", function (collection) {
      let tagSet = new Set();
    
      collection.getFilteredByGlob("./en/posts/*.md").forEach(item => {
        (item.data.tags || []).forEach(tag => tagSet.add(tag));
      });
    
      return filterTagList([...tagSet]);
    });
    

    这会将collections.tagList 设置为字符串数组(来自英文帖子的标签)。

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2021-04-14
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多