【问题标题】:How to generate a list of all collections in 11ty11ty如何生成所有集合的列表
【发布时间】:2021-05-10 23:10:33
【问题描述】:

我有一个简单的 Eleventy 网站 v0.11.0

我在前端使用标签来生成集合。

例如:

---
title: Some post
tags:
 - apple
 - banana
 - soccer
---

我想为每个标签/集合显示一个列表,但我不知道该怎么做。

【问题讨论】:

    标签: javascript static-site eleventy


    【解决方案1】:

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

        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;
        });
    

    然后在模板中:

    {% for tag in collections.tagsList %}
        <a href="/tags/{{tag}}">{{tag}}</a>
    {% endfor %}
    
    

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

    【讨论】:

      【解决方案2】:

      你自己的答案对我来说似乎很正确。一些cmets:

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

      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”)和字母排序:

      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))
      })
      

      【讨论】:

      • 好收获。 addGlobalData 是复制粘贴错误。我和你一样在做 addCollection。我会更新答案
      【解决方案3】:

      我的工作代码版本

            // 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
        })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        • 2015-10-13
        • 2021-07-28
        • 1970-01-01
        相关资源
        最近更新 更多