【问题标题】:How to create a category/tags page in Jekyll without a list of posts for that tag?如何在 Jekyll 中创建一个没有该标签的帖子列表的类别/标签页面?
【发布时间】:2015-08-03 11:50:18
【问题描述】:

我想创建一个 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>

【问题讨论】:

    标签: jekyll


    【解决方案1】:

    我想分享我的简单标签云和标签页面的实现。它在此博客 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>
    

    相关帖子

    【讨论】:

      【解决方案2】:

      不幸的是,要生成额外的 tags/&lt;tag&gt;.html 页面,您需要使用 Jekyll 插件来生成 generate pages

      实现这一点的最简单方法可能只是拥有一个包含所有标签的所有帖子的tags.html 页面,然后使用 JavaScript 显示/隐藏正确的部分。使用 Jekyll,您仍然可以生成像 /tags.html#&lt;tag&gt; 这样的 url,然后使用 window.location.hash 检索标签名称。从那里,使用 JQuery 选择器来显示/隐藏匹配的元素。

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多