在 11ty 中处理“数据”的核心和灵魂是将东西放入.json
或.js
将 JavaScript 对象导出到_data
项目文件夹中的文件中。
假设您在其中有一个文件,kittens.js
如下所示:
const kittens = [
{
name: 'Oreo',
colors: ['black','white'],
slug: 'oreo'
},
{
name: 'Hershey',
colors: ['brown'],
slug: 'hershey'
}
];
module.exports = () => {
return kittens;
};
kittens
就 11ty 个能够具有“页面”上下文的模板文件而言,该关键字现在是一个特殊关键字。
它包含有关 Oreo 和 Hershey 的嵌套对象结构信息。
您所要做的就是选择一种模板语言并循环遍历它。
例如,您可以将一个文件放入项目的主文件夹中,例如,loop_kittens.liquid
像这样,11ty 会选择它作为它应该从中生成 HTML 的东西:
---
layout: "layouts/my_base"
pagination:
alias: documentData
data: kittens
size: 1
addAllPagesToCollections: true
permalink: /kitten/{{ documentData.slug }}/index.html
---
<h1>{{documentData.name}}</h1>
<ul>
{% for color in documentData.colors %}
<li>color</li>
{% endfor %}
</ul>
我对 Drupal 不熟悉,但是从任何声明性的基于 SQL (表形)的系统进入命令式嵌套列表和对象形状时,您将不得不处理的第一件事基于系统的系统正在考虑循环数据并以不同的方式选择它。
您甚至可能希望预处理这些文件夹文件中的原始数据,以便以针对相当传统的手动 for 循环进行优化的方式_data
导出(尽管将大小设置为 1 的模板的“分页”属性肯定会有所帮助隐藏将数据集划分为需要生成的单个 HTML 页面的复杂性)。kittens
11ty 分页还可以“分块”您的数据集,这样您只需要担心手动循环通过kittens
任何给定页面上的给定子块(例如,“小猫档案”,每个档案页面有 10 只小猫)。
但就实际在每个页面上为每只小猫放置一个块而言——这将是您模板中的手动 for 循环,无论您选择哪种模板语言。 (我发现 Liquid 在简单性和能够将 for 循环的每次传递中的内容委托给“包含”之间取得了很好的平衡,以维护模块化、组件化的代码——请参阅“动态部分”。)
我建议像我刚才那样制作自己的虚拟数据,并在开始尝试做一个真正的项目之前,在练习网站上练习使用 11ty 的所有模板、布局、组件包含等选项。11ty 不是一个非常固执己见的框架,所以最好选择自己喜欢的组织方式并了解它的魔法文件夹命名约定。