2013-12-21 4 views
3

Я бы хотел, чтобы мой внешний файл Liquid template ссылался на файл JavaScript только тогда, когда это требует его страница. Я создал переменную страницы, page.slideshow, которая контролирует это:Переопределение переменных передних переменных YAML из Liquid

default.html:

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

Теперь у меня есть шаблон, который «наследует» от default.html, что позволяет страницу, чтобы указать в YAML frontmatter - список изображений (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, но я предпочел бы структурировать его ближе к тому, что я попытался сделать выше.

+0

было ли это разрешено на вашем конце? –

ответ

0

У меня была игра, и вы не можете сделать это так, как вы предлагали. Кажется, переменные страницы просто не могут быть изменены после их установки. Возможно, вы сможете установить его с помощью Jekyll-плагинов, но это совсем другое.

Самый чистый способ, который я нашел, состоит в том, чтобы поместить всю логику в ваш основной внешний шаблон.

{% assign imageCount = page.images | size %} 
{% if page.slideshow or imageCount > 1 %} 
    {{ page.images | size }} 
    <script src="/js/slideshow.js"></script> 
{% endif %} 
Смежные вопросы