Создание категорий на сайте Jekyll

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

Единственный способ, которым я могу это сделать, - вручную создать конкретный html файл для каждой категории в корне. Но я уверен, что должен быть более динамичный способ?

У меня есть сайт, размещенный на github - https://github.com/sirbrad/sirbrad.github.com

Спасибо заранее!

Брэд

Ответы

Ответ 1

Вы можете создать список всех доступных категорий, используя данные site.categories, используя первый элемент каждой категории (который является массивом), чтобы получить название категории:

{% for cat in site.categories %}
    <li>{{ cat[0] }}</li>
{% endfor %}

И вы можете сгенерировать список всех сообщений в данной категории, например:

{% for post in site.categories.CATEGORY_NAME %}

Кажется, что невозможно создать отдельную страницу HTML для каждой категории, как вы надеялись, но, возможно, хорошим компромиссом будет создание отдельной страницы, содержащей список всех категорий, где каждая категория содержит все записи в эта категория. Затем вы можете использовать простой JavaScript для скрытия сообщений в каждой категории до тех пор, пока не будет выбрано название категории, что дает почти одинаковый опыт работы с отдельными страницами архива для каждой категории.

Ответ 2

Примечание. Я связываю примеры здесь, которые используют теги (потому что примеры уже существуют с тегами), но они работают одинаково для категорий.


Если вы не хотите использовать плагин, например, если вы хотите, чтобы ваш сайт работал на страницах GitHub, у вас есть только два варианта:

Ответ 3

Вы можете использовать Dave Perett generate_categories.rb плагин для автоматического создания страницы для каждой категории на вашем сайте. Затем используйте цикл for для запуска через категории вашего сайта и создайте ссылку для каждого в вашей навигации (или там, где вы хотите ссылаться на страницы архива), как это сделал Джон в ответ на ваш quesiton.

Ответ 4

Для страниц github вы можете создать страницу архива с

{% for pt in site.categories %}[{{pt[0]}}](#cat-{{pt[0]}}), {% endfor %}

{% for cat in site.categories %}
{% assign nt = cat[0] %}

#### {{ nt }} {#cat-{{nt}}}
<ul> 
  {% for post in site.posts %}
     {% for pt in post.categories %}
    {% if nt == pt %}
      <li>
        {{post.published}} <a href="{{ post.url }}">{{ post.title }}</a>
      </li>
    {% endif %}  
   {% endfor %} 
  {% endfor %}
</ul>  
{% endfor %}

На моей машине, с примерно 200 сообщениями, для создания всего сайта требуется 3 с. Это потому, что внутренний if выполняется категориями x number_of_posts раз. С другой стороны, у вас будет страница архива без использования какого-либо плагина.