你如何为 eleventy 中的所有页面指定默认布局?

How do you specify a default layout for all pages in eleventy?

您似乎应该能够使用 global data files and the data cascade 为 11ty 站点中的所有页面指定后备布局,但我不知道该怎么做。

我在几个地方尝试了以下 JSON:

{
  "layout": "layouts/page.njk"
}

我已将此 JSON 放入:

到目前为止没有运气。

这实际上是(据我所知)在 Eleventy 中默认情况下还不可能的事情。您可以使用目录数据文件为该目录中嵌套的所有文件指定布局,但目前无法从项目的根目录开始工作。有 a feature request for this on GitHub.

在同一个 GitHub 问题中,提出了一个解决方法,效果很好:namely to make a layout.js file in the _data folder which exports a string pointing to the layout location.

我刚才使用以下设置对其进行了快速测试,它似乎按预期工作:

希望对您有所帮助!

我的解决方案是将我所有的模板文件放在一个名为 pages 的目录中。在我的 .eleventy.js 配置中,我将输入设置为 pages。例如:

module.exports = eleventyConfig => {
  return {
    dir: {
      input: 'pages',
    }
  };
};

然后,在 Eleventy documentation 之后,您可以在 pages 中设置一个名为 pages.json 的 JSON 文件。该文件应如下所示:

{
  "layout": "default"
}

因此,我的所有页面(包括索引页面)都默认为默认布局。如果你需要覆盖一个页面,你可以在 frontmatter 中包含布局。或者,如果您想覆盖目录中的所有内容,只需在该目录中包含一个具有指定布局的 <directory-name>.json 文件。

我个人 运行 没有对这个设置有任何问题,将我的所有模板放在一起而不与其他配置文件混合是一个额外的好处。

@user13601182给的方法对我有用

另一种选择是在源文件夹的顶层添加一个数据文件。它需要与文件夹同名,后跟 11tydata.js 或 11tydata.json。例如,如果您的源文件夹名为 src,则该文件将为 src.11tydata.js 或 src.11tydata.json 例如:

src/src.11tydata.js

    module.exports = {
      // Set a default layout for everything in the src folder and below.
      layout: "layouts/default.njk"
    }