如何从集合文件的本地化版本生成Eleventy和显示标记



我是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是一个单独的过滤器,它排除了某些冗余标签(

我可以在名为posts_en的en/posts文件夹中创建一个基于posts的集合,使用以下方法:

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集合——这是经过编译的,但在我的Tags页面上没有得到任何结果。我在网上搜索了SO和各种各样的帖子,但到目前为止,没有任何乐趣——有人能帮忙建议吗?我很乐意将解决方案从英语复制到法语,只要我能找到适合英语内容的东西!

如果您的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设置为一个字符串数组(来自英文帖子的标签(。

最新更新