Я использую Jekyll как статический генератор для веб-сайта (а не в блоге), и я хочу иметь автоматически сгенерированный список всех страниц на моей индексной странице. В частности, я хочу иметь разные категории и перечислять все статьи в каждой категории отдельно. Вот пример того, что я описываю, если у вас возникли проблемы. Есть ли способ сделать это в Jekyll (например, страницы GitHub)? Я видел страницу документации переменных, но это похоже на формат сообщения в блоге.
Создание списка страниц (не сообщений) в данной категории
Ответ 1
При создании моего собственного сайта я столкнулся с этой самой проблемой, и я нашел (IMHO) легкое и надежное решение. Надеюсь, это полезно для всех, кто хочет сделать что-то подобное.
Проблема
Учитывая подмножество страниц (не сообщений) на сайте, перечислите их по рубрикам на основе их категорий. Например: учитывая набор страниц, на которые мы рассматриваем страницы ресурсов (или ссылочные страницы или любую логическую группу страниц, которые вы хотите отобразить), мы хотим перечислить их по категориям (например, код, пояснения и т.д.),.
Решение
Чтобы получить нужное поведение, мы должны внести изменения в три места:
-
_config.yml
-
resources.md
-
resource-file-X.md
_config.yml
В _config.yml
мы должны добавить список всех категорий/ключевых слов/тегов (или того, что вы хотите назвать), которые появятся в файлах ресурсов. Вот что я имею в своем:
category-list: [code, editors, math, unix]
Вы можете вызвать переменную что угодно, я выбрал category-list
, просто убедитесь, что вы используете одну и ту же переменную в файле resource.md
.
Примечание. Порядок размещения элементов в списке - это порядок, который они будут перечислены на странице resource.md
.
resource-file-X.md
Это файлы, которые вы хотите проиндексировать и связать с ними на странице resources.md
. Все, что вам нужно сделать, это добавить две переменные файла в начало каждого из этих файлов. Первый - указать, что этот файл является файлом ресурсов.
resource: true
Во-вторых, укажите, какие категории вы хотите индексировать. Вы можете индексировать его под столько категорий, сколько хотите, и если вы хотите, чтобы страница была не проиндексирована, оставьте этот список пустым. Моя ссылка для правильной обработки EINTR в C имеет следующие категории:
categories: [code, unix]
resources.md
Это файл, который будет генерировать список страниц на основе их соответствующих категорий. Все, что вам нужно сделать, это добавить в этот файл следующий код (или любой другой файл, в который вы хотите включить этот список):
{% for cat in site.category-list %}
### {{ cat }}
<ul>
{% for page in site.pages %}
{% if page.resource == true %}
{% for pc in page.categories %}
{% if pc == cat %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endif %} <!-- cat-match-p -->
{% endfor %} <!-- page-category -->
{% endif %} <!-- resource-p -->
{% endfor %} <!-- page -->
</ul>
{% endfor %} <!-- cat -->
Разбивка кода
Простое объяснение того, как это работает:
- Прокрутите каждую из категорий, указанных в
_config.yml
. - Отобразить заголовок с именем этой категории.
- Запустите неупорядоченный список для страниц, относящихся к этой категории.
- Прокрутите страницы на сайте.
- Если страница является файлом ресурсов, указанным в переменной файла
resource
, то для каждой из категорий, к которой принадлежит файл, если одна из них соответствует текущей категории, отображается ссылка на эту страницу.
Примечание: переменные category-list
в _config.yml
и categories
в файлах ресурсов могут быть вызваны независимо от того, что вы хотите, просто убедитесь, что вы используете те же переменные в файле, генерирующем список.
Другое примечание. Когда вы изменяете _config.yml
, вы должны полностью перезапустить Jekyll, даже если у вас есть опция --watch
, вы должны остановить и перезапустить его. Мне потребовалось некоторое время, чтобы понять, почему мои изменения не вступили в силу!
Конечный продукт
Вы можете увидеть конечный продукт на странице ресурсов мой сайт, хотя я просто собрал это вместе сегодня, чтобы на момент этого это далеко не полный, но вы можете проверить свою биографию, если хотите, на домашней странице.
Надеюсь, это поможет!
Ответ 2
Там более чистый способ сделать это, используя жидкое свойство "содержит"
on _config.yml добавить свой индекс категорий
categories: [fruit, meat, vegetable, cheese, drink]
на вашей странице .md внутри переднего элемента добавьте одну или несколько категорий, доступных в _config.yml
---
layout: page
title: Orange juice
description: Orange juice is juice from oranges. It made by squeezing oranges.
categories: [fruit, drink]
---
на вашем шаблоне, чтобы получить все страницы в категории фруктов:
{% for page in site.pages %}
{% if page.categories contains 'fruit' %}
<div class="item">
<h3>{{page.title}}</h3>
<p>{{page.description}}</p>
</div>
{% endif %}
{% endfor %}
Ответ 3
Вы должны различать страницы и сообщения (статьи). Список всех сообщений, отсортированных по категориям, не является проблемой вообще. Вы можете прокручивать сайт site.categories, он содержит имя категории и список всех сообщений в этой категории.
Возможно также перечисление всех страниц, вы можете прокручивать сайт site.pages. Но страница не относится к определенной категории (только сообщения).
Когда я смотрю на ваш опубликованный пример, использование категорий в сообщениях, а затем цикл через site.categories, кажется, путь. Это даст вам именно желаемый результат.