eleventyNavigation | ||||||
---|---|---|---|---|---|---|
|
Opts in to a full deep merge when combining the Data Cascade. This will use something like lodash.mergewith
to combine Arrays and deep merge Objects, rather than a simple top-level merge using Object.assign
. Read more at Issue #147. This will likely become the default in an upcoming major version.
{% codetitle ".eleventy.js" %}
module.exports = function(eleventyConfig) {
eleventyConfig.setDataDeepMerge(true);
};
Note that all data stored in the pagination
variable is exempted from this behavior (we don’t want pagination.items
to be merged together).
{% codetitle "my-template.md" %}
---
title: This is a Good Blog Post
tags:
- CSS
- HTML
layout: my-layout.njk
eleventyNavigation:
key: my-key
---
{% codetitle "_includes/my-layout.njk" %}
---
title: This is a Very Good Blog Post
author: Zach
tags:
- JavaScript
eleventyNavigation:
parent: test
---
Results in the following data available in my-template.md
:
{% codetitle "JavaScript", "Syntax" %}
{
"title": "This is a Good Blog Post",
"author": "Zach",
"tags": [
"CSS",
"HTML"
],
"eleventyNavigation": {
"key": "my-key"
}
}
With this enabled, your data structure will look like this when my-template.md
is rendered:
{% codetitle "JavaScript", "Syntax" %}
{
"title": "This is a Good Blog Post",
"author": "Zach",
"tags": [
"CSS",
"HTML",
"JavaScript"
],
"eleventyNavigation": {
"key": "my-key",
"parent": "test"
}
}
Use the override:
prefix on any data key to opt-out of this merge behavior for specific values or nested values.
{% codetitle "posts/posts.json" %}
{
"tags": ["posts"]
}
{% codetitle "posts/firstpost.md" %}
---
override:tags: []
---
Even though normally the posts/firstpost.md
file would inherit the posts
tag from the directory data file (per normal data cascade rules), we can override the tags
value to be an empty array to opt-out of this behavior.