从Liquid覆盖YAML前端变量

时间:2013-12-21 22:30:03

标签: jekyll liquid

我希望我最外层的Liquid模板文件仅在页面需要时引用JavaScript文件。我创建了一个页面变量page.slideshow,它控制着这个:

default.html中:

{% if page.slideshow %}
  <script type="text/javascript" src="/js/slideshow.js"></script>
{% endif %}

现在我有一个从default.html“继承”的模板,它允许页面在其YAML前端中指定一个图像列表(page.images)。只有当这个列表有多个元素时,才能将slideshow.js包含在页面中。

我对此的尝试看起来像是:

other.html

---
layout: default
---
{% assign imagecount = page.images | size %}
{% if imagecount > 1 %}
  {% assign page.slideshow = true %}
{% endif %}

但是,这似乎不会影响default.html的呈现,因为脚本标记未包含在最终页面中。

作为一种解决方法,我可以修改列出多个图片的每个页面的前端,以明确设置slideshow: Yes,或者更改default.html以检查page.slideshow or (page.images | size) > 0,但我更愿意将其更接近于我上面尝试过的。

1 个答案:

答案 0 :(得分:0)

我有一个游戏,你不能按照你的建议去做。似乎页面变量一旦设置就无法修改。您可以使用Jekyll插件设置它,但这是另外一件事。

我发现最干净的方法是将所有逻辑放在主要的最外层模板中。

{% assign imageCount = page.images | size %}
{% if page.slideshow or imageCount > 1 %}
    {{ page.images | size }}
    <script src="/js/slideshow.js"></script>
{% endif %}
相关问题