首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成11ty中所有集合的列表

如何生成11ty中所有集合的列表
EN

Stack Overflow用户
提问于 2021-02-07 07:35:29
回答 3查看 698关注 0票数 0

我有一个简单的11站点v0.11.0

我在前面的内容中使用标签来生成集合。

例如:

代码语言:javascript
复制
---
title: Some post
tags:
 - apple
 - banana
 - soccer
---

我想显示每个标签/集合的列表,但我不知道如何做到这一点。

EN

回答 3

Stack Overflow用户

发布于 2021-02-07 07:35:29

我可以通过在我的.eleventy文件中创建一个新的集合来让它工作...

代码语言:javascript
复制
    eleventyConfig.addCollection("tagsList", function(collectionApi) {
        const tagsList = new Set();
        collectionApi.getAll().map( item => {
            if (item.data.tags) { // handle pages that don't have tags
                item.data.tags.map( tag => tagsList.add(tag))
            }
        });
        return tagsList;
    });

然后在模板中:

代码语言:javascript
复制
{% for tag in collections.tagsList %}
    <a href="/tags/{{tag}}">{{tag}}</a>
{% endfor %}

但这感觉很麻烦,我怀疑一定有更好的方法来做到这一点。

票数 2
EN

Stack Overflow用户

发布于 2021-02-13 23:29:01

你自己的答案在我看来是相当正确的。一些评论:

下面是我如何创建集合(与您的解决方案非常相似):

代码语言:javascript
复制
config.addCollection('tagsList', (collectionApi) => {
  const tagsSet = new Set()
  collectionApi.getAll().forEach((item) => {
    if (!item.data.tags) return
    item.data.tags.forEach((tag) => tagsSet.add(tag))
  })
  return tagsSet
})

模板中的用法将是相同的。

额外功能:具有过滤功能(不包括标签"foo“和"bar")和字母排序:

代码语言:javascript
复制
config.addCollection('tagsList', (collectionApi) => {
  const tagsSet = new Set()
  collectionApi.getAll().forEach((item) => {
    if (!item.data.tags) return
    item.data.tags
      .filter((tag) => !['foo', 'bar'].includes(tag))
      .forEach((tag) => tagsSet.add(tag))
  })
  return [...tagsSet].sort((a, b) => b.localeCompare(a))
})
票数 0
EN

Stack Overflow用户

发布于 2022-01-10 21:32:56

我的工作代码版本

代码语言:javascript
复制
      // Display tag list on page
  eleventyConfig.addCollection('tagsList', function (collectionApi) {
    const tagsList = new Set()
    collectionApi.getAll().map((item) => {
      if (item.data.tags) {
        // handle pages that don't have tags
        item.data.tags.filter((tag) => !['yourtag'].includes(tag)).map((tag) => tagsList.add(tag))
      }
    })
    return tagsList
  })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66083103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档