Подтвердить что ты не робот

Как настроить макет для конкретной страницы/сообщения в Jekyll?

Я хотел бы внести некоторые изменения в макет Jekyll. Изменения небольшие и разные. Например, связывание дополнительного файла CSS или JavaScript. Или добавить некоторую информацию в заголовок. Или настроить заголовок страницы. Важно, чтобы эти изменения зависели от страницы/сообщения.

Поскольку изменения небольшие и разнообразные, создание специального макета для каждого из них кажется слишком дорогостоящим.

Я попытался создать свое собственное решение, но перешел в невозможность использовать переменные, включая инструкции.

Кто-нибудь решил что-то подобное? Например, привязка специального CSS к определенному сообщению?

4b9b3361

Ответ 1

Вы можете использовать переднюю тему YAML, чтобы настроить все, что угодно, на любую запись/страницу. Любая информация, которую вы предоставляете, будет доступна через макеты и включается под переменной page или под определенной строкой в ​​любом из них.

Это звучит как решение для вашего случая: вы можете использовать переднюю материю YAML следующим образом:

---
extra_css:
  - foo.css
  - dir/bar.css
  - /s/baz.css
---

И затем используйте это в заголовке макета следующим образом:

{% for css_name in page.extra_css %}
    <link rel="stylesheet" href="{{ css_name }}">
{% endfor %}

Таким образом, вы можете добавить любую логику, основанную на том, какие данные вы предоставляете по почте в элементе управления YAML.

Если вы хотите абстрагировать некоторые из этих логических модулей, вы можете использовать хак вокруг включений, назначая переменную до ее включения, а затем используя ее внутри. Вот ссылка с описанием того, как это сделано в проекте Jekyll Bootstrap (кстати, на сайте для него есть много приятной информации о Jekyll).

И да, Jekyll не позволяет использовать переменные в include, поэтому, если вы хотите включить что-то условно, вам понадобится список всех доступных компонентов, а затем создайте все условия для вставки одного или другой, когда они вам понадобятся.


Другим решением является разделение всего макета на включенные и создание макетов с различными уровнями сложности - таким образом вы могли бы установить любой из этих основных макетов для сообщения, а затем написать любой дополнительный код с включая любые блоки, которые вам понадобятся из основных макетов, поэтому вы можете выглядеть так:

---
layout: custom
---
<aside class="sidebar">
    {% include comments.html %}
    {% include sidebar.html %}
</aside>
<div class="content" role="main">
    Foo bar baz
</div>

Здесь вы можете использовать настраиваемый макет, который не включает базовый макет страницы, и не включает боковую панель и комментарии, поэтому вы можете за один пост решить, какой уровень макета вы хотите, а затем переопределить все, что необходимо для переопределяться.

Кроме того, если вам нужно настроить разные места, но с неизвестным контентом, вы можете использовать переднюю часть YAML с блоками, например

extra_head: |
    <style>
    * {background: red}
    </style>

тогда вы можете вызвать такую ​​переменную из головы: {{ page.extra_head }} и получить любой контент, который вы там разместили. Тем не менее, вы не можете использовать какие-либо жидкие метки внутри YAML, но затем вы можете использовать любые теги YAML для таких переменных, чтобы вы могли их убрать или заменить какие-либо другие строки простым фильтром замены.

И если ничто из них не подойдет вам, тогда Jekyll вам не подойдет - как я написал в комментарии, Jekyll - это всего лишь механизм блога, и вы не должны ждать, пока он будет сложным, как XSLT.

Ответ 2

Я когда-либо пытался создать независимую страницу на статическом сайте jekyll-bootstrap. Например my_cv.html, который нуждается в независимом стиле css. Вместо создания нового репозитория github с gh-страницами (извините GitHub), я просто просто заполняю все последнее содержимое html в сообщение my_cv.md, так как формат markdown на самом деле совместим с html, я думаю, и, к счастью, это работает.