Простой способ поддерживать теги в блоге Jekyll - PullRequest
45 голосов
/ 11 сентября 2009

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

Я могу пометить сообщение, используя текст YAML, но как мне сгенерировать страницы для каждого тега, в котором будут перечислены все сообщения для тега?

Ответы [ 6 ]

75 голосов
/ 08 января 2014

Вот решение с отсортированными по алфавиту тегами на одной странице .
Он использует только жидкость, что означает, что он работает на GitHub Pages:

{% capture tags %}
  {% for tag in site.tags %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}

{% for tag in sortedtags %}
  <h3 id="{{ tag }}">{{ tag }}</h3>
  <ul>
  {% for post in site.tags[tag] %}
    <li><a href="{{ post.url }}">{{ post.title }}</a></li>
  {% endfor %}
  </ul>
{% endfor %}

Вы можете увидеть это в действии здесь .


EDIT:

Существует также способ создания отдельной страницы для каждого тега без плагинов (который будет работать на страницах GitHub) .

У меня есть более подробное объяснение в моем блоге:
Отдельные страницы для тега / категории с Jekyll (без плагинов)

Для начала вам нужен новый файл макета:

/_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.

Вот пример для тега jekyll:

/tags/jekyll/index.html

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

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

Чтобы создать корневой индексный файл (т. Е. Список тегов, которые ссылаются на /tags/jekyll/index.html и т. страница с алфавитно отсортированными тегами:

{% capture tags %}
  {% for tag in site.tags %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags %}
    <a href="/tags/{{ tag }}/">{{ tag }}</a><br>
{% endfor %}

Будет сгенерирован список таких ссылок:

<ul>
    <li><a href="/tags/.net/">.net</a></li>
    <li><a href="/tags/authentication/">authentication</a></li>
    <li><a href="/tags/backup/">backup</a></li>
</ul>

Обратите внимание, что в этом решении для разделения тегов используется пробел, поэтому он не работает, если ваши теги содержат пробелы, и Комментарий Евгения Брикмана также применим и здесь.

14 голосов
/ 14 декабря 2010

Этот список создаст для вас страницу по категории: https://gist.github.com/524748

Используется плагин Jekyll Generator, а также подкласс Page.

8 голосов
/ 15 сентября 2009

Посмотрите на сайты, использующие jekyll . Есть несколько пользовательских вилок, которые реализовали функциональность тегов, надеюсь, также так, как вы хотите: -)

5 голосов
/ 25 февраля 2010

У меня был тот же вопрос, и я наткнулся на это: http://gist.github.com/143571.

Это грабельное задание, которое генерирует список тегов. Я немного изменил его, и моя версия находится на: http://github.com/mattfoster/mattfoster.github.com/blob/master/Rakefile.

Хотя это не дает вам страницу для каждого тега, вы можете использовать якоря, которые на полпути!

1 голос
/ 08 июля 2015

Основываясь на ответе Кристиана выше, я написал скрипт bash, который делает то, что он описал.

https://github.com/ObjectiveTruth/objectivetruth.github.io/blob/master/rebuild_tags.sh

Убедитесь, что сопровождающая 14 строка vim script в каталоге /non_website_resources/

И

Сделайте /_layouts/tagpage.html, показанный в ответе Кристиана выше, но переименуйте его в /_layouts/tag_pages.html

Структура файла должна быть такой:

.jekyll_website_root
├── _posts
├── _layout
│   ├── tag_pages.html
├── rebuild_tags.sh

Запуск из корневого каталога ./rebuild_tags.sh

Если вы получили ошибку «Отказано в разрешении», обязательно запустите chmod 777 rebuild_tags.sh


Если вы посмотрите на комментарии сценариев, все довольно просто:

  • Использует sed, чтобы найти все теги в каждом файле .md в каталоге _post

  • Использует sed для преобразования данных в правильный формат

  • Принимает все уникальные теги и создает каталог и index.html для каждого

Таким образом, если у вас есть какие-либо новые теги, просто запустите скрипт, чтобы перестроить страницы, прежде чем нажать на github

Хороший простой не плагин способ делать теги


EDIT

Убрана зависимость от других файлов. Просто нужен один скрипт!

1 голос
/ 30 апреля 2015

Я использую замечательный плагин Jekyll Tagging , который автоматически генерирует облако тегов и страницы тегов. Простота установки и использования.

Вот страница для тега «фото» в моем блоге (на французском), и вы можете увидеть облако тегов внизу.

...