Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
112 lines (88 sloc) 2.25 KB
eleventyNavigation
parent key order
Data Cascade
Data Deep Merge
4

Data Deep Merge {% addedin "0.6.0" %}

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).

Example

{% 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
---

Without Deep Data Merge

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 Data Deep Merge

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

Using the override: prefix

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.

You can’t perform that action at this time.