8

似乎您应该能够使用全局数据文件数据级联为 11ty 站点中的所有页面指定后备布局,但我不知道如何。

我在几个位置尝试了以下 JSON:

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

我已将此 JSON 放入:

  • _data/default.json
  • _data/site.json
  • _data/site.11tydata.json
  • _data/11tydata.json

到目前为止还没有运气。

4

3 回答 3

7

这实际上是(据我所知)在 Eleventy 中默认情况下还不可能的事情。您可以使用目录数据文件为嵌套在该目录中的所有文件指定布局,但这目前不适用于项目的根目录。在 GitHub 上有一个功能请求

在同一个 GitHub 问题中,提出了一种解决方法,该方法效果很好:即在 _data 文件夹中创建一个 layout.js 文件,该文件导出一个指向布局位置的字符串

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

在此处输入图像描述

我希望这会有所帮助!

于 2020-06-18T04:20:16.903 回答
1

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

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

然后,按照Eleventy 文档pages,您可以在调用中设置一个 JSON 文件pages.json。该文件应如下所示:

{
  "layout": "default"
}

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

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

于 2021-03-05T18:49:50.277 回答
0

@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"
    }

于 2021-10-03T02:50:29.823 回答