If I have a frontmatter on a layout that sets a variable, does that variable apply on the page ?
I have a page with frontmatter and content
---
layout: test
---
{{ myvalue }}
and I have a layout called test
with frontmatter
---
myvalue: foo
---
The page does not display foo
.
Having read this tutorial I think this doesn’t work because the layout is processed after the page, although that is talking about variables assigned in a layout’s liquid rather than its front matter.
My use case is to override defaults when a specific layout is used. So I have defaults defined in _config.yml
but want to change some of those when a specific layout is used. Perhaps there is another way…?
Page variables in front matter are accessed via the page
object while layout front matter is layout
.
What you probably want to do is use assign
to set a new variable that defaults to layout.myvalue
but can be overided at the page level.
Something like this:
{% assign myvalue = page.myvalue | default: layout.myvalue %}
And you’d access it with {{ myvalue }}
which should output foo
. If you set myvalue: bar
in a page’s front matter instead of the layout it should output bar
.
1 Like
Hi @mmistakes, what I am trying to do is set the theme’s toc
setting in a layout instead of setting it in the page.
I have toc: true
set as a default in _config.yml
but I want to disable it for my index pages. I have a _layouts/index.md
file where I set toc: false
in the frontmatter hoping that pages using that layout would not get a toc. But it doesn’t work like that.
If I have to set something in the page file then I might as well do toc: false
in its frontmatter. It’s what I am doing now but I hoped that I could factor that out to the layout.
Sorry - I posed the question in a generic way rather than calling out the theme…
Ah yeah that’s the problem. The theme looks for page.toc
not layout.toc
.
Your best bet would be to set a front matter default and scope it to the pages you want that value for.