【问题标题】:How to display tags in jekyll and get the tag to click through to all relevant collection posts如何在 jekyll 中显示标签并让标签点击进入所有相关的收藏帖子
【发布时间】:2019-02-19 15:20:00
【问题描述】:

我希望在侧边栏中显示我收藏帖子中的所有标签,并让每个标签点击进入所有相关帖子。我还想像这样显示标签的使用次数:

tag_name (10)

这是我目前拥有的所有标签作为列表但我无法弄清楚如何让标签点击进入所有相关页面并显示大小。

<ul class="">
    {% assign tags =  site.vacancies | map: 'tags' | join: ','  | split: ',' | uniq %}
     {% for tag in tags %}
        <li class="text-capitalize">
            <a href="{{ tag }}" class="sidebar-tag">{{ tag }}</a>
        </li>
     {% endfor %}
 </ul>

【问题讨论】:

    标签: tags jekyll


    【解决方案1】:

    所以有一种方法可以做到这一点,即在遍历集合中的帖子并使用大量液体的同时创建一组标签......我决定做自己的解决方法。

    我有一个存储在/_data/tagList.yml 中的所有标签的主列表。每个标签都有一个名称和 slug,如果您愿意,您可以添加更多字段,如描述。我遍历tagList 中的数据,每个标签都有一个指向专用页面的链接,该页面列出了包含该标签的所有帖子。

    如果您遵循Jekyll docs 并在前面使用tags 并且您在命名标签时保持一致,那么您可以使用site.tags[tag.name] | size 过滤器来计算有多少帖子具有该标签。

    此解决方法的缺点是:

    • 每次制作新标签时都需要更新tagList.yml
    • 您需要为该标签创建一个新页面(没什么大不了的,因为您可以从其他标签页面复制/粘贴代码,然后更改您要查找的标签)
    • 您需要确保在命名和使用标签方面保持一致
    //   /_data/tagList.yml
    - name: Coding
      slug: coding
    
    - name: UnpopularOpinion
      slug: unpopular-opinion
    
    //   /_posts/2019-01-01-example.html
    ---
    tags: [Coding, UnpopularOpinion]
    ---
    
    //   /blog/tags.html
    {% for tag in site.data.tagList %}
        <div>
            <h2><a href="/blog/tags/{{tag.slug}}.html">{{tag.name}}</a></h2>
            {% assign postCount = site.tags[tag.name] | size %}
            <em>
                {% if postCount == 1 %}
                    {{postCount}} post
                {% else %}
                    {{postCount}} posts
                {% endif %}
            </em>
        </div>
    {% endfor %}
    
    //   /blog/tags/coding.html
    {% assign numPosts = site.tags.Coding | size %}
    {% if numPosts == 0 %}
        <p>No posts have this tag...yet.</p>
    {% endif %}
    
    {% for post in site.tags.Coding %}
        ...code to display a post...
    {% endfor %}
    

    【讨论】:

    • 这有点工作 :D 我现在有一个不错的标签列表,我已经设法让标签点击进入一个页面。计数功能不起作用...我变为零了??
    • 你可以在&lt;em之前使用{{ postCount }}来输出postCount的值。如果它始终为 0,则 site.tagstag.name 是错误的。因此,请确保帖子中的首要问题是使用tags 字段并且名称完全相同。还忘了提到tags 应该有一个逗号分隔的数组。 tags: [Coding, UnpopularOpinion]。这也可能有帮助
    • 更新了答案,使其更加充实。希望能解决您的错误
    【解决方案2】:

    首先,使用Jekyll Variables提供的site.tags将所有标签检索到一个列表中

    {% capture site_tags %}{% for tag in site.tags %}{{ tag | first }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
    {% assign tags_list = site_tags | split:',' | sort_natural %}
    

    其次,获取每个标签的链接及其相应的帖子数

    <ul>
      {% for item in (0..site.tags.size) %}{% unless forloop.last %}
        {% capture this_word %}{{ tags_list[item] | strip_newlines }}{% endcapture %}
        <li><a href="#{{ this_word}}" class="tag"><span class="tag-name">{{ this_word }}</span> <span class="count">{{ site.tags[this_word].size }}</span></a></li>
      {% endunless %}{% endfor %}
    </ul>
    

    第三,显示每个标签的名称及其帖子的名称和日期。

    {% for item in (0..site.tags.size) %}{% unless forloop.last %}
      {% capture this_word %}{{ tags_list[item] | strip_newlines }}{% endcapture %}
        <article id="{{ this_word }}">
        <h2 class="tag-heading tag-name">{{ this_word }}</h2>
            <ul>
        {% for post in site.tags[this_word] %}{% if post.title != null %}
          <li><a href="{{ site.url }}{{ post.url }}" title="{{ post.title }}" >{{ post.date | date: '%m/%d/%Y' }} ---- {{ post.title }}</a></li>
        {% endif %}{% endfor %}
            </ul>
        </article>
    {% endunless %}{% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2014-12-06
      相关资源
      最近更新 更多