【发布时间】:2023-12-25 11:12:01
【问题描述】:
我有一个插件,它可以根据页面浏览量在 Jekyll 的集合中生成热门帖子列表。在集合中,我有两个类别,我想按与原始帖子相同的类别过滤热门帖子。
这是我写的代码:
<ul>
{% if page.path contains '_kb/cat1' %}
{% assign popular_posts = site.popular_posts | where:"category","cat1" %}
{% for page in popular_posts | limit:3 %}
<li>
<a href="{{ page.url }}" title="{{ page.title }}">{{ page.title }}</a>
</li>
{% endfor %}
{% else %}
{% assign popular_posts = site.popular_posts | where:"category","cat2" %}
{% for page in popular_posts | limit:3 %}
<li>
<a href="{{ page.url }}" title="{{ page.title }}">{{ page.title }}</a>
</li>
{% endfor %}
{% endif %}
</ul>
- 有什么方法可以让这段代码更简单?
- 如何从该列表中排除原始帖子?例如,如果我在热门帖子 1 上,我想显示热门帖子 2、3 和 4 的链接,而不是原始帖子本身。
我知道我可以在 Ruby 中使用 if post != self 之类的东西,但我不知道如何在 Liquid 中使用。我已经阅读了一些教程,但没有找到答案。这就是我在这里问的原因。
编辑:我尝试首先访问集合的属性,如下面的@matrixanomaly 建议的那样。但是现在它遍历集合中的每个文档,并给出与集合中文档数量相等的热门帖子列表的数量。这是我的代码。有没有办法将此循环限制为一个,即文档本身(或原始帖子)?
{% for collection in site.collections %}
{% capture label %}{{ collection | first }}{% endcapture %}
{% for doc in site.collections.[label].docs %}
{% assign category = doc.category %}
{% if page.category == category %}
{% assign popular_posts = site.popular_posts | where:"category",category %}
{% for node in popular_posts | limit:3 %}
{% unless node.url == page.url %}
<li>
<a href="{{ node.url }}" title="{{ node.title }}">{{ node.title }}</a>
</li>
{% endunless %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
【问题讨论】:
-
请在您尝试过的(使用该代码)和无效的方面付出一些努力。由于这个问题(以及您刚刚在 Jekyll 上发布的其他问题)似乎只是“我复制了这段代码,我不知道如何让它做我想做的事,请修复此代码或请给我代码做我喜欢做的事。
-
@matrixanomaly 嗨,李,感谢您的评论。我已经从问题中删除了我尝试过的代码,但它没有用。您可以在修订版*.com/posts/32039416/revisions 中看到它。这是我自己的代码,我没有在任何地方复制它。我知道我可以在 Ruby 中使用
if post != self之类的东西,但我不知道如何在 Liquid 中使用。我已经阅读了一些教程,但没有找到答案。这就是我在这里问的原因。 -
我没有注意到您所做的修改,感谢您强调这一点,我很抱歉假设您已将代码带到其他地方(您应该提及您已经编写了它并且您不确定如何从那里继续,因为您的其他问题主要是这里的一些代码)。很高兴知道你已经表现出努力。我花时间看了你的问题,我的答案如下。希望它对你有用!
-
非常感谢!我只是假设您应该先尝试,然后再寻求帮助:)