我是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是一个单独的过滤器,它排除了某些冗余标签(
我可以在名为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
设置为一个字符串数组(来自英文帖子的标签(。