I wonder if with Jekyll 3.6 it is still necessary to for example do
controls: {% if site.controls != null %}{{ site.controls }}{% else %}true{% endif %}
instead of the much cleaner
controls: {{ site.controls | fallback: true }}
that has been offered in this PR but obviously never included but then sadly frozen-due-to-age. Is there any chance to get to see this functionality in Jekyll anytime soon? Is there a reason why this has not been integrated yet? Is there another way to get rid of this messy if-then-else glob?
1 Like
I have no idea what the fallback filter is, but Liquid has a default filter that works how you want. Replace fallback with default and you should be good to go.
controls: {{ site.controls | default: true }}
Thank you for the suggestion. I actually did try this in the first place, but did not get it to work as expected:
| file |
content |
_config.yml |
controls: false |
default.tmpl |
controls: {{ site.controls | default: true }} |
index.html |
controls: true |
| but: |
|
_config.yml |
controls: false |
default.tmpl |
controls: {{ site.controls }} |
index.html |
controls: false |
I have no explanation why implementing the default filter in the template turns out true, so I did some research and found the fallback PR and I figured Jekyll is doing something differently.
Do you have any clue, whats wrong with my settings?
The default filter seems to be working as expected, from the example you provided.
{{ site.controls | default: true }} means the result will default to true when site.controls evaluates to a “falsey”.
In the case of Liquid (and Ruby in general), both nil and false are the only “falsey” values. Everything else is a “truthy”.
One approach then would be to adjust your template to use a disabled setting.
{% unless site.controls == 'disabled' %}
// controls are enabled by default.
// markup related to controls here
{% endunless %}
yes, that totaly makes sense. thank you for the explanation 