【问题标题】:How can an Eleventy site display a list of pages in a directory?Eleventy 站点如何显示目录中的页面列表?
【发布时间】:2019-08-25 01:57:26
【问题描述】:

我正在建立一个新的 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 函数生成我需要的集合,该函数将通过collections.all() 排序并根据outputPath 返回集合。但这对我来说感觉很 hacky,我想知道是否有更优雅的解决方案。

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

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

或许

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

我有什么遗漏吗?

【问题讨论】:

    标签: javascript node.js static-site


    【解决方案1】:

    我想通了。

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

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

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

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

    文档声明此功能将在未来版本中默认启用。在撰写本文时,它仍然是可选的。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2013-11-15
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多