Как я могу отсортировать сообщения по тегам в Jekyll?

Я не знаком с Ruby и знаю, что для этого есть общий плагин Jekyll, но я пытался весь день и не смог заставить его работать.

Я добавил этот плагин:

module Jekyll
  class TagIndex < Page
    def initialize(site, base, dir, tag)
      @site = site
      @base = base
      @dir = dir
      @name = 'index.html'
      self.process(@name)
      self.read_yaml(File.join(base, '_layouts'), 'tag_index.html')
      self.data['tag'] = tag
      tag_title_prefix = site.config['tag_title_prefix'] || 'Posts Tagged &ldquo;'
      tag_title_suffix = site.config['tag_title_suffix'] || '&rdquo;'
      self.data['title'] = "#{tag_title_prefix}#{tag}#{tag_title_suffix}"
    end
  end
  class TagGenerator < Generator
    safe true
    def generate(site)
      if site.layouts.key? 'tag_index'
        dir = site.config['tag_dir'] || 'tag/tag'
        site.tags.keys.each do |tag|
          write_tag_index(site, File.join(dir, tag), tag)
        end
      end
    end
    def write_tag_index(site, dir, tag)
      index = TagIndex.new(site, site.source, dir, tag)
      index.render(site.layouts, site.site_payload)
      index.write(site.dest)
      site.pages << index
    end
  end
end

и в _config.yml я добавил

tag_dir: /tag

Я показываю список тегов с этим включаемым файлом:

<div class="tags modal">
    <ul>
        {% for tag in site.tags %}
        <li>
            <a href="/tag/{{ tag | first | slugize }}/">
                {{ tag | first }}
            </a>
        </li>
        {% endfor %}
    </ul>
</div>

И когда я пытаюсь выбрать тег, URL-адрес изменяется соответствующим образом, но больше ничего не меняется. Он не отображает мой шаблон tag_index и не фильтрует теги.

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


person davidcondrey    schedule 12.10.2014    source источник


Ответы (4)


Страницы github поддерживают только некоторые плагины. Ваши страницы тегов в настоящее время не создаются.

Если вы хотите использовать свой плагин тегов, вы должны

  • создать свой сайт локально
  • добавьте пустой файл .nojekyll
  • поместите сгенерированные файлы в свою главную ветку
  • вы также можете отправить свой код в другую ветку, например код
person David Jacquel    schedule 12.10.2014
comment
На самом деле проблема была связана с кодом history.js и тем, как я его реализовал, но эта информация также была полезной. Спасибо. - person davidcondrey; 13.10.2014
comment
Теперь у меня есть репозиторий git на основе _sites. Можно ли добавить к нему родительский каталог с файлами dev в качестве ответвления? - person davidcondrey; 13.10.2014
comment
Посмотрите мое объяснение того, как настроить несколько веток здесь - person David Jacquel; 13.10.2014

Если одна страница с одним тегом со всеми сообщениями для всех тегов (например, эта в моем блоге) < / em> вам достаточно, вы можете просто сгенерировать его с помощью Jekyll / Liquid, вообще не используя какие-либо плагины.

Если вам абсолютно необходима отдельная страница для каждого тега, у вас есть только два варианта:

  1. Ответ Дэвида Жакеля (сгенерируйте страницу с плагином на локальном компьютере и отправьте только сгенерированный HTML-код в GitHub)

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

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

person Christian Specht    schedule 12.10.2014

Если вы не можете решить проблему сортировки вашего posts по тегам, вы можете рассмотреть вариант коллекции.

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

Например, допустим, у вас есть блог, посвященный обзорам фильмов. Вы пишете свои обзоры в виде сообщений. Итак, для каждого фильма вы создаете пост. Допустим, вы хотите составить список из 25 лучших фильмов, которые обязательно нужно посмотреть, или из 10 лучших фильмов ужасов, в которых будет содержаться подробная информация о каждом фильме.

В этом случае posts или _ 3_ - не лучший выбор. Вместо этого используйте collections.

Вы можете иметь любое количество коллекций. Это набор определенных вещей. Коллекция фруктов, коллекция овощей, коллекция напитков и т. Д. Не создавайте коллекции для подмножеств, например, экзотических фруктов. Они попадают в сборник фруктов. В таких случаях используйте категории.

person Chetabahana    schedule 20.05.2018

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

С сайта:

Джекилл делает категории доступными для нас на site.categories. Итерация по site.categories на странице дает нам еще один массив с двумя элементами, первый элемент - это имя категории, а второй элемент - это массив сообщений в этой категории ... Для тегов это точно так же, за исключением переменной равно site.tags.

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

Это ☝️ предоставит вам каждый тег и связанные с ним сообщения вашего сайта Jekyll. Вы можете пойти дальше и вернуть только определенные теги. Например, укажите только тег nsfw и связанные с ним сообщения.

{% for tag in site.tags %}
  {%- if tag[0] == "nsfw" -%}
    <h3>{{ tag[0] }}</h3>
    <ul>
      {% for post in tag[1] %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
      {% endfor %}
    </ul>
  {%- endif -%}
{% endfor %}
person Beck    schedule 09.03.2019