Jekyll отображать сообщения по категориям
Почесывая голову над этим - помогите очень признателен.
Я хочу отобразить список всех моих постов в Jekyll, упорядоченных по категориям. Я знаю, что третья строка не верна, но я не могу понять, что это должно быть. Есть идеи? Спасибо!
{% for category in site.categories %}
<h3>{{ category | first }}</h3>
{% for post in page.categories.category %}
{{ post.title }}<br>
{% endfor %}
{% endfor %}
6 ответов
Понял! Нужен промежуточный цикл постов, прежде чем перечислять отдельные посты
<ul>
{% for category in site.categories %}
<li><a name="{{ category | first }}">{{ category | first }}</a>
<ul>
{% for post in category.last %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
К вашему сведению, если кто-то хочет просто перечислить сообщения в одной категории, это работает (отличается от приведенного выше примера, поскольку категория возвращает список сообщений...
<p>Posts in category "basic" are:</p>
<ul>
{% for post in site.categories.basic %}
{% if post.url %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
Теперь для этого есть официальный плагин. jekyll-archives
,
Для того, чтобы использовать его,
добавлять jekyll-archives
на ваш Gemfile
а также _config.yml
файл.
добавьте конфигурацию, похожую на приведенную ниже, согласно вашей необходимости.
jekyll-archives:
enabled: all
layouts:
year: archive/year
month: archive/month
day: archive/day
tag: archive/tag
category: archive/category
permalinks:
year: '/:year/'
month: '/:year/:month/'
day: '/:year/:month/:day/'
tag: '/tags/:name/'
category: '/category/:name/'
layouts
может использовать следующие атрибуты страницы в зависимости от archive type
,
- page.type - (Любой следующий.
year
,month
,day
,tag
,category
) - page.title - (Доступно только для тега типа и категории.
Nil
иначе.) - page.date - (в зависимости от
page.type
вы должны разобрать поле даты и месяца) - page.posts - (Список постов в этом архиве)
Вот пример макета для архива, основанного на годах
<h1>Archive of posts from {{ page.date | date: "%Y" }}</h1>
<ul class="posts">
{% for post in page.posts %}
<li>
<span class="post-date">{{ post.date | date: "%b %-d, %Y" }}</span>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
<h5>Categories</h5>
{% for category in site.categories %}
{% assign cat = category[0] %}
<h6><a href="#">{{ cat }}</a></h6>
{% for post in site.categories[cat] %}
<a href="{{ post.url }}">{{ post.title }}</a> <small>{{ post.date }}</small>
{% endfor %}
{% endfor %}
Я не могу вспомнить точный синтаксис, но что-то вроде следующего кода должно получить имена категорий, чтобы вы могли получать сообщения для каждой категории...
{% for category in site.categories %}
{% assign cat_name = category[0] %}
{% for post in site.categories.cat_name %}
...
{% endfor%}
{% endfor %}
Вот ответ, который использует сортировку (полезно!):
{% comment %}
#
# Change date order by adding '| reversed'
# To sort by title or other variables use {% assign sorted_posts = category[1] | sort: 'title' %}
#
{% endcomment %}
{% assign sorted_cats = site.categories | sort %}
{% for category in sorted_cats %}
{% assign sorted_posts = category[1] | reversed %}
<h2 id="{{category[0] | uri_escape | downcase }}">{{category[0] | capitalize}}</H2>
<ul>
{% for post in sorted_posts %}
<li><a href="{{ site.url }}{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
Это не мое, оно взято отсюда.