【问题标题】:Jekyll -- number of posts by custom yml tagsJekyll -- 自定义 yml 标签的帖子数
【发布时间】:2015-12-08 05:37:36
【问题描述】:

我正在开发一个 jekyll / gh-pages 网站。我想建立一个侧栏,根据 CUSTOM 标签列出帖子的数量。所以我可以使用不同的 yml 元素对帖子进行排序。使用标签 yml 元素和这段代码可以正常工作

<h3>Activities By Topic</h3>
{% for tag in site.tags %}
{% assign t = tag | first %}
  {% for atag in site.data.tags %}
    {% if atag.slug == t %}
      <h5><a href="{{ site.baseurl }}/{{ atag.slug }}">{{ atag.name }}  
    {% endif %}
  {% endfor %} 
      ({{ tag | last | size }}) 
     </a></h5>
{% endfor %} 

但我想要的是另一个块“按类型划分的活动”(我们正在尝试以不同的方式对帖子进行排序。我设置了一个 topic-tag yml 元素和一个 `topic-tag.yml 文件'

_data 文件夹 https://github.com/lwasser/data-lesson-catalog/blob/gh-pages/_data/topic-tags.yml 组织文件夹: https://github.com/lwasser/data-lesson-catalog/tree/gh-pages/org/topic-tag 示例帖子: https://github.com/lwasser/data-lesson-catalog/edit/gh-pages/_posts/lessons/2015-09-10_dc-R.md

来自示例帖子的相关 YML

---
layout: post
catalog-entry-type: lesson
title: Data Carpentry R for Ecology
topic-tag: ["Analysis", "Vizualization"] 
---

不工作的代码:

<h3>Data Activities By Topic Tag</h3>
{% for tag in site.topic-tag %}
{% assign t = tag | first %}

{% for atag in site.data.topic-tags %}
{% if atag.slug == t %}
  <h5><a href="{{ site.baseurl }}/{{ atag.slug }}">{{ atag.name }}</h5>
{% endif %}
{% endfor %} 
      ({{ tag | last | size }}) 
{% endfor %}

我可以按其他标签(不仅仅是标签 yml 元素)对帖子进行排序吗?

我想要的输出是这样的: 分析(2) 可视化(3)

如果是这样,关于为什么上面的代码不起作用的任何建议?我在这里发现了另一篇帖子,询问了类似的问题,但解决方案是使用 yaml“标签”元素,这不适用于我的用例。 非常感谢, 莉亚

【问题讨论】:

    标签: github yaml jekyll github-pages


    【解决方案1】:

    您可以使用categories。它们就像标签一样工作,可以作为另一种排序帖子的方式。

    【讨论】:

    • 谢谢。我希望能够使用自定义标签,因为我有不止 2 个。所以我希望能够使用 topic.tags、location.tags 等。这是 Jekyll 不支持的东西吗?
    【解决方案2】:

    向所有正在为同样的事情苦苦挣扎的人致敬。这是我学到的。

    标签和类别内置于 jekyll 构建中。因此,您可以在不向配置文件添加任何内容的情况下调用 site.tags 或 site.categories。您创建的其他自定义标签(如 topic-tags)本身并不被 jekyl 理解为可以在站点级别调用的变量。我的解决方法 - 使用计数器按自定义变量计算帖子。代码是这样的

    {% for member in site.data.topic-tags %}
      {% assign counter = 0 %}
      <!-- this code counts the number of posts associated with the member -->
      {% for post in site.posts %}
        {% if post.topic-tag contains member.slug %}
        {% assign counter = counter | plus: 1 %}
        {% endif %}
      {% endfor %}  
      <h5><a href="{{ site.baseurl }}/topic-tag/{{ member.slug }}">{{ member.name }} ({{ counter }})</h5>
    
    {% endfor %}
    

    这就像一个魅力,尽管它正在查看所有帖子以查看它是否在 yaml 中包含 member 标记。

    我希望这对某人有所帮助!

    【讨论】:

      【解决方案3】:

      这是我用来显示每个类别的帖子数量的代码。您可以将 site.categories 更改为 site.tags 以通过标签显示它们。

      <h2 class="question">Topics ({{ site.posts | size }} total)</h2>
      <ul class="topics">
      {% capture tags %}
        {% for tag in site.categories %}
          {{ tag[0] }}
        {% endfor %}
      {% endcapture %}
      {% assign sortedtags = tags | split:' ' | sort %}
      {% for tag in sortedtags %}
        <li class="topic-header"><b>{{ tag }} ({{ site.categories[tag] | size }} topics)</b>
          <ul class='subnavlist'>
        {% for post in site.categories[tag] %}
            <li class='recipe'>
              <a href="/{{ site.github.project_title }}{{ post.url }}">{{ post.title }}</a>
            </li>
        {% endfor %}
          </ul>
        </li>
      {% endfor %}
      </ul>
      

      检查操作here

      【讨论】:

      • 你好@hyip 谢谢你,但这不是问题所在。很容易按类别和标签进行排序,因为 jekyll 在站点级别已经了解它们。如果您创建自定义标签,那么您需要调整您的代码。见下文。我最终使用了一个 yaml 列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2018-04-20
      • 2015-08-10
      • 2012-04-21
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多