Eleventy 站点如何显示目录中的页面列表?

How can an Eleventy site display a list of pages in a directory?

我正在建立一个新的 Eleventy 站点,但 运行 遇到了一个小障碍。我的页面被组织成子目录。我希望每个目录的索引页列出该目录中的所有页面。

例如:

|--section1
|  |--index.njk // this should list /section1/page1/, /section2/page2/, etc.
|  |--page1.md
|  |--page2.md
|   --(etc...)
|--section2
|  |--index.njk // this should list /section2/page1/, etc.
|  |--page1.md
|   --(etc..)

Eleventy 似乎通过其 collections 特性提供了与此类似的功能。但是,集合似乎只使用标签中提供的数据。

我可以通过在每个 page.md 的前面指定 tags: ["section1"] 来获得我想要的输出。但是,这意味着需要维护更多冗余元数据。

看起来我也可以使用 eleventyConfig.addCollection 函数生成我需要的集合,该函数会根据 outputPathcollections.all() 和 return 进行排序].但这对我来说感觉很老套,我想知道是否有更优雅的解决方案。

理想情况下,我希望能够在我的 index.njk 模板中放入这样的内容:

{%- for page in directory -%}
{# do stuff #}
{%- endfor -%}

或者

{%- for page in collections.directory -%}
{# do stuff #}
{%- endfor -%}

我是否遗漏了什么?

我想通了。

您可以添加一个data file to each directory并将目录名称添加为标签。

例如,section1/section1.json 将包含:

{
    "tags": ["Section 1"]
}

这将应用于该目录中的所有页面。 但是,在各个页面中指定的任何标签都将覆盖它。您必须启用 data deep merge 功能才能合并目录和页面标签。只需将 eleventyConfig.setDataDeepMerge(true); 添加到您的 .eleventy.js 配置文件。

文档指出此功能将在未来版本中默认启用。在撰写本文时,它仍然只是选择加入。