Создайте собственный шаблон на основе страниц в Jekyll
Я хотел бы создать еще один цикл на основе страниц, так же, как папка _posts
работает для раздела блога, но для небольшого каталога журналов. (Надеюсь, это имеет смысл)
Может быть, я не понимаю что-то простое, но я просто не могу это решить.
У меня есть этот цикл, который чувствует, что он должен работать, но ничего не возвращается.
{% for page in site.pressitems %}
<li>
<a href="{{ post.url }}">{{ page.title }}</a>
</li>
{% endfor %}
Код, ссылки, объяснения, что-то очень ценится.:)
Ответы
Ответ 1
Вы не можете добавить свою собственную коллекцию в site
именно так.
site
знает только три коллекции: pages
, posts
и categories
. Вы можете получить все должности категории, выполнив site.<category>.posts
. AFAIK, категории работают только для сообщений, а не страниц.
Это имеет смысл, поскольку Jekyll должен быть главным образом механизмом ведения блога, а не генератором статического веб-сайта.
Итак, ваше лучшее решение прямо сейчас состоит в "лжи" для jekyll. Убедитесь, что у вас есть сообщения, когда на самом деле вы делаете страницы.
_posts/
pressitems/
blog/
Вы сможете прокручивать элементы внутри _posts/pressitems следующим образом:
for item in site.categories.pressitems.posts do
... {{ item.title }} ... {{ item.url }}
endfor
Аналогично, ваши "реальные записи в блоге" будут проходить следующим образом:
for p in site.categories.blog.posts do
... {{ p.title }} ... {{ p.url }}
endfor
Выгода заключается в том, что вам придется уважать соглашение об именах Jekyll относительно имен файлов; ваши пресеты должны выглядеть как настоящие посты. Это означает, что их нужно называть начиная с yyyy-mm-dd-string, например, сообщений. Просто дайте им случайную дату.
_posts/
pressitems/
1901-01-01-the-first-press-item.textile
1902-01-01-the-second-one.textile
EDIT: Это было правдой, когда этот пост был первоначально написан в 2012 году, но не больше. Современный Jekyll позволяет создавать собственные коллекции https://jekyllrb.com/docs/collections/
Ответ 2
Вы можете выполнить итерацию через site.pages
{% for page in site.pages %}
<h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
<p>{{ page.content }}</p>
{% endfor %}
И ограничьте список единственными страницами, использующими определенный макет.
{% for page in site.pages %}
{% if page.layout == 'team' %}
<h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
<p>{{ page.content }}</p>
{% endif %}
{% endfor %}
Смотрите этот пост о создании карты сайта:
http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/
Ответ 3
По состоянию на October 2016
:
В Jekyll 2.5.3 вы можете добавить свою коллекцию на сайт.
Добавьте папку _my_collection в корневой каталог и заполните документами.
Добавьте к _config.yml:
коллекции:
- my_collection
Теперь вызывайте документы, используя сообщение, страницу или категорию.
например
{ for post in site.my_collection
< do something > }
Важно отметить, что эту функцию можно использовать, она была помечена командой Jekyll как "экспериментальная функция, и API может изменяться, пока функция не стабилизируется".
Ответ 4
В jekyll вы также можете добавить yaml front-matter на страницы. Нет ничего плохого в добавлении пользовательского front-matter, такого как категория страницы.
---
layout: plain
title: "My beautiful page"
description: ""
snippet: ""
page-category: "category 1"
---
получить доступ к ним через:
{% for page in site.pages %}
{% if page.page-category == "category 1" %}
{{ page.content }}
{% endif %}
{% endfor %}