首页 文章

Jekyll - 自定义yml标签的帖子数量

提问于
浏览
0

我正在一个jekyll / gh-pages网站上工作 . 我想 Build 一个侧栏,根据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 %}

但我想要的是另一个块"Activities by Type"(我们试图以不同的方式对帖子进行排序 . 我设置了一个 topic-tag yml元素和一个`topic-tag.yml文件'

_data文件夹https://github.com/lwasser/data-lesson-catalog/blob/gh-pages/_data/topic-tags.yml org文件夹: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“tags”元素,这对我的用例不起作用 . 非常感谢,莉娅

3 回答

  • 0

    这里的代码用于显示每个类别的帖子数量 . 您可以将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 .

  • 0

    你可以使用categories . 它们就像标签一样工作,可以是另一种对帖子进行排序的方式 .

  • 0

    嗨,任何正在为同样的事情奋斗的人 . 这就是我所学到的 .

    标签和类别内置于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 标签 .

    我希望这可以帮助别人!

相关问题