如何在没有该标签的帖子列表的情况下在Jekyll中创建类别/标签页面?

时间:2015-08-03 11:50:18

标签: jekyll

我想创建一个Jekyll站点,其中根文件夹中的根页/ index.html只有标签/类别列表(假设两者现在都是相同的)。我希望每个标记/类别都链接到tag_page,其中包含标记和与每个标记关联的帖子。现在,我把它作为我的根index.html:

{% 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 %}

列出主页上每个标签的标签和帖子。

相反,我想这样:

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

{% for tag in sortedtags %}
  <a href="{{ tag.url }}">{{ tag }}</a>
{% endfor %}

但是tag.url现在不起作用。我希望每个tag.url带我到下一页,其中列出了标签名称和每个标签的帖子。我该怎么做?

这是我的_layouts文件夹中的tag_page布局。我想在有人点击index.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>

2 个答案:

答案 0 :(得分:2)

我想分享我对简单标签云和标签页面的实现。它在博客website中完美运行。

演示

实施

1。为标签云创建部分

我为可重用性创建了部分_include/tag_cloud.html。 此部分显示所有站点标记,每个标记链接到其对应的标记 tags.html页面的一部分。 它可以选择使用一组标记名作为参数。 使用这个部分,我可以在任何地方放置标签列表。

{% comment %}
<!--
- If tag_names array is not passed in as argument,
  - Create an empty array,
  - Obtain a tag name and push it to the array, and
  - Sort the tag names.
- List tags as a tag cloud.
-->
{% endcomment %}

{% if include.tag_names %}
  {% assign tag_names = include.tag_names %}

{% else %}
  {% assign tag_names = "" | split: "|"  %}

  {% for posts_by_tag in site.tags %}
    {% assign tag_names = tag_names | push: posts_by_tag.first %}
  {% endfor %}

  {% assign tag_names = tag_names | sort %}
{% endif %}

<ul class="tag-cloud">
  {% for tag_name in tag_names %}
    <li>
      <a href="{{ baseurl }}/tags#{{ tag_name | slugize }}">
        {{ tag_name }}
      </a>
    </li>
  {% endfor %}
</ul>

2。创建一个页面,用于显示标签云,并在每个标签下发布标题

我创建了一个页面tags.html,专门用于显示标签云(上面创建)并在每个标签下发布标题。在页面顶部,它将所有标签列为标签云,每个标签链接到页面中自己的部分。在标签云下方,我将链接放置到按标签分组的博客帖子。

---
layout: page
title: Posts By Tags
permalink: /tags
---

{% assign tag_names = "" | split: "|"  %}

{% for posts_by_tag in site.tags %}
  {% assign tag_names = tag_names | push: posts_by_tag.first %}
{% endfor %}

{% assign tag_names = tag_names | sort %}

{% include tag_cloud.html tag_names=tag_names %}

<hr>

<section class="posts-by-tags">
  {% for tag_name in tag_names %}
    <div>
      <h3 id="{{ tag_name }}">
        {{ tag_name | capitalize | replace: "_", " " }}
      </h3>

      {% for post in site.tags[tag_name] %}
        <a href="{{ post.url | prepend: baseurl }}">
          {{ post.title }}
        </a>
      {% endfor %}
    </div>
  {% endfor %}
</section>

相关文章

答案 1 :(得分:1)

不幸的是,要生成其他tags/<tag>.html页面,您需要使用Jekyll插件generate pages

实现这一目标的最简单方法可能只是让tags.html页面包含所有标签的所有帖子,然后使用JavaScript显示/隐藏正确的部分。使用Jekyll,您仍然可以生成/tags.html#<tag>等网址,然后使用window.location.hash检索标记名称。从那里,使用JQuery选择器来显示/隐藏匹配元素。