Сделать пользовательский цикл на основе страниц в Jekyll - PullRequest
12 голосов
/ 02 февраля 2012

Я хотел бы создать еще один цикл на основе страницы, точно так же, как папка _posts работает для раздела блога, но для небольшого каталога журналов.(Надеюсь, это имеет смысл)

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

{% for page in site.pressitems %}
<li>
    <a href="{{ post.url }}">{{ page.title }}</a>
</li>
{% endfor %}

Код, ссылки, объяснения, все очень ценится.:)

Ответы [ 4 ]

19 голосов
/ 02 февраля 2012

Вы не можете добавить свою собственную коллекцию в site просто так.

site знает только о трех коллекциях: pages, posts и categories. Вы можете получить все сообщения категории, выполнив site.<category>.posts. AFAIK, категории работают только для сообщений, а не для страниц.

Это имеет смысл, поскольку предполагается, что 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. Просто дайте им случайную дату.

_posts/
  pressitems/
    1901-01-01-the-first-press-item.textile
    1902-01-01-the-second-one.textile

РЕДАКТИРОВАТЬ: Это было верно, когда этот пост был изначально написан, в 2012 году, но не больше. Modern Jekyll позволяет создавать собственные коллекции https://jekyllrb.com/docs/collections/

13 голосов
/ 17 апреля 2013

Вы можете перебирать 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/

10 голосов
/ 04 февраля 2015

В Jekyll 2.5.3 вы можете , можете добавить свою коллекцию на сайт.

Добавить папку _my_collection в корневой каталог и заполнить документами.Добавьте к _config.yml: collection: - my_collection

Теперь вызывайте документы, используя сообщение, страницу или категорию.например, { for post in site.my_collection < do something > }

Важно отметить, что эту функцию можно использовать, она была помечена командой Jekyll как «экспериментальная функция, и API может изменяться, пока функция не стабилизируется».

4 голосов
/ 28 января 2015

В jekyll вы также можете добавить к страницам фронтальную тему yaml.Нет ничего плохого в добавлении пользовательского интерфейса, такого как page-category.

---
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 %}
...