Skip to content

Latest commit

 

History

History
112 lines (88 loc) · 2.25 KB

data-deep-merge.md

File metadata and controls

112 lines (88 loc) · 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.