我正在尝试在我的jekyll网站中用液体构建一个(简单的,未加权的)标签云。使用此代码时,标签云呈现良好:
{% assign sitetags = "" %}
{% for page in site.pages %}
{% for tag in page.tags %}
{% unless sitetags contains tag %}
{% assign sitetags = sitetags | append:tag | append:', ' %}
{% endunless %}
{% endfor %}
{% endfor %}
{% assign sitetags = sitetags | split:', ' | sort %}
{% for tag in sitetags %}
{% capture tag_name %}{{ tag }}{% endcapture %}
<div>
<a href="/tag/{{ tag_name }}">{{ tag_name }}</a>
</div>
{% endfor %}
但是,有一个问题:如果一个标签的名称包含在另一个标签中,则它不会显示在标签云中。例如,“艺术”包含在“艺术历史”中,因此它不会出现。为了解决此问题,我尝试对其进行修复,但是,它无法正常工作。这是我的代码:
{% assign sitetags = "" %}
{% for page in site.pages %}
{% for tag in page.tags %}
{% if sitetags contains tag %}
{% assign sitetags = sitetags | split:', ' %}
{% assign truetag = true %}
{% for taggo in sitetags %}
{% if taggo != tag %}
{% continue %}
{% else %}
{% assign truetag = false %}
{% break %}
{% endif %}
{% endfor %}
{% if truetag == true %}
{% assign sitetags = sitetags | append:tag | append:', ' %}
{% endif %}
{% else %}
{% assign sitetags = sitetags | append:tag | append:', ' %}
{% endif %}
{% endfor %}
{% endfor %}
{% assign sitetags = sitetags | split:', ' | sort %}
{% for tag in sitetags %}
{% capture tag_name %}{{ tag }}{% endcapture %}
<div>
<a href="/tag/{{ tag }}">{{ tag }}</a>
</div>
{% endfor %}
之所以尝试这种方式而不是仅仅使用site.tags,是因为我在其他要包含的目录中有文章/文章。当我使用site.tags时,它仅包括博客文章上的标签,而不包括文章中的标签。本质上,我的网站在/ _blog下都有常规博客文章,并且在其他位置也有文章,但是我想将所有这些标签的标签汇总在同一标签云中。
我真的很感谢我做错了什么或如何解决的建议。谢谢!
答案 0 :(得分:0)
可以使用数组来代替使用字符串来存储标签。
{% assign sitetags = "" | split:"" %}
{% for page in site.pages %}
{% if page.tags.size %}
{% assign sitetags = sitetags | concat: page.tags %}
{{ sitetags | inspect }} <br>
{% endif %}
{% endfor %}
{% assign sitetags = sitetags | sort | uniq %}
{{ sitetags | inspect }} <br>
{% for tag in sitetags %}
<div>
<a href="/tag/{{ tag }}">{{ tag }}</a>
</div>
{% endfor %}
答案 1 :(得分:0)
我自己就能弄清楚这一点。问题的一部分是初始化数组,所以我最终使用了一个字符串,因为我由于某种原因无法使数组工作。我跳过了初始化,直接向其添加项目。之后,我所要做的就是运行uniq过滤器,它过滤掉所有重复项,因此我不必进行任何字符串比较或类似的操作。
这是解决方案:
{% for post in site.pages %}
{% for tag in post.tags %}
{% assign tagcloud = tagcloud | append:tag | append:', ' %}
{% endfor %}
{% endfor %}
{% assign tagcloud = tagcloud | split:", " | uniq | sort %}
{% for tag in tagcloud %}
{% capture tag_name %}{{ tag }}{% endcapture %}
<div>
<a href="/tag/{{ tag_name }}">{{ tag_name }}</a>
</div>
{% endfor %}