【发布时间】:2022-01-22 15:54:46
【问题描述】:
我是 Eleventy 的新手,正在从事个人项目 - 大部分工作正常,但我需要帮助来根据存储在单独文件夹中的帖子生成和过滤标签(作为国际化/本地化我的网站的一部分)。
我有两个文件夹:en 和 ff。在每个文件夹中,我都有一个名为 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