Создание категорий на сайте, управляемом Jekyll - PullRequest
14 голосов
/ 07 марта 2012

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

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

У меня есть сайт на github - https://github.com/sirbrad/sirbrad.github.com

Заранее спасибо!

Бред

Ответы [ 4 ]

21 голосов
/ 07 марта 2012

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

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

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

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

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

4 голосов
/ 01 ноября 2014

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


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

  1. Создать одну страницу, которая содержит все категории, отсортированные по алфавиту

  2. Действительно, создайте отдельный файл HTML для каждой категории вручную, , но поместите как можно больше в файл макета, поэтому создание новой страницы категории не составит большого труда :

    /_layouts/tagpage.html

    ---
    layout: default
    ---
    
    <h1>{{ page.tag }}</h1>
    
    <ul>
    {% for post in site.tags[page.tag] %}
      <li>
        {{ post.date | date: "%B %d, %Y" }}: <a href="{{ post.url }}">{{ post.title }}</a>
      </li>
    {% endfor %}
    </ul>
    

    Для этого файла макета вам понадобится всего две строки фронтального текста YAML, чтобы добавить новую страницу тега:
    (в данном случае для тега )

    /tags/jekyll/index.html

    ---
    layout: tagpage
    tag: jekyll
    ---
    

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

1 голос
/ 29 декабря 2013

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

0 голосов
/ 05 января 2016

Для страниц 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 раз.С другой стороны, у вас будет архивная страница без использования какого-либо плагина.

...