Подтвердить что ты не робот

Создание списка страниц (не сообщений) в данной категории

Я использую Jekyll как статический генератор для веб-сайта (а не в блоге), и я хочу иметь автоматически сгенерированный список всех страниц на моей индексной странице. В частности, я хочу иметь разные категории и перечислять все статьи в каждой категории отдельно. Вот пример того, что я описываю, если у вас возникли проблемы. Есть ли способ сделать это в Jekyll (например, страницы GitHub)? Я видел страницу документации переменных, но это похоже на формат сообщения в блоге.

4b9b3361

Ответ 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, кажется, путь. Это даст вам именно желаемый результат.