我想创建一个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>
答案 0 :(得分:2)
我想分享我对简单标签云和标签页面的实现。它在博客website中完美运行。
我为可重用性创建了部分_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>
我创建了一个页面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选择器来显示/隐藏匹配元素。