Создайте собственный шаблон на основе страниц в 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 %}