【问题标题】:Jekyll filter categories and posts by tagsJekyll 按标签过滤类别和帖子
【发布时间】:2014-12-12 05:32:54
【问题描述】:

在 Jekyll 中,我通过标记过滤帖子,显示具有分配标签的帖子列表,如下所示:

---
layout: layout
---
<ul>
{% for post in site.posts %}
{% for tag in post.tags %}
{% if tag == page.tag %}

<li itemprop="name" itemprop=name>{{ post.title }}</li>

{% endif %}
{% endfor %}
{% endfor %}
</ul>

Burt 我想做的是显示具有标签帖子的类别以及每个类别下列出的帖子。


示例用例

类别 1 包含帖子 1、帖子 2、​​帖子 3。 类别 2 有职位 4、职位 5、职位 6。 类别 3 有帖子 7

帖子 1、2、4 有标签 Tag1。

标签页应显示类别 1 + 帖子 1,帖子 2。类别 2 + 帖子 4。


在主页上,我显示类别以及每个类别下的所有帖子,如下所示:

{% assign counter=0 %}
<main id="page" role="main">
{% for category in site.categories %}
<div class="col pane ui-layout-{% assign counter=counter | plus:1 %}" id="{{ page.id }}">
    <div class="colheader">
        <div class="bar"></div>
        <p class="lead">Leadin text</p>
        <h1>{{ category | first }}</h1>
    </div>
    <div class="colscroll unlock">
{% for posts in category %}
{% for post in posts %}
    <div class="colblock" itemscope itemtype="http://schema.org/BlogPosting">    
        <div class="excerpt">
            <time class="date" datetime="{{ page.date | '%Y-%m-%dT%H:%i:%S-08:00' }}" itemprop="datePublished">
                {{ page.date | date: '%B %d, %Y' }}
            </time>
        <h1>
            <a itemprop="url" href="{{ post.url }}" target="_blank" title="{{ post.title }}">
                <span itemprop="name" itemprop=name>{{ post.title }}</span>
            </a>
        </h1>                        
        <p itemprop="description">
            {{ post.excerpt }}..
        </p>
        <p class="link_tags">{{ page.tags }}</p>
        </div>
    </div>
{% endfor %}
{% endfor %}
    </div>
</div>
{% endfor %}
</main>

所以在标签页面上,我尝试像这样实现我想要的,但它会像主页一样返回所有类别和所有帖子,而不是按标签过滤。

---
layout: layout
---
<ul>
{% for post in site.posts %}
{% for tag in post.tags %}
{% if tag == page.tag %}


{% assign counter=0 %}
<main id="page" role="main">
{% for category in site.categories %}
<div class="col pane ui-layout-{% assign counter=counter | plus:1 %}" id="{{ page.id }}">
    <div class="colheader">
        <div class="bar"></div>
        <p class="lead">Leadin text</p>
        <h1>{{ category | first }}</h1>
    </div>
    <div class="colscroll unlock">

{% for posts in category %}
{% for post in post.tags %}
        <div class="colblock" itemscope itemtype="http://schema.org/BlogPosting">    
            <div class="excerpt">
                <time class="date" datetime="{{ page.date | '%Y-%m-%dT%H:%i:%S-08:00' }}" itemprop="datePublished">
                    {{ page.date | date: '%B %d, %Y' }}
                </time>
                <h1>
                    <a itemprop="url" href="{{ post.url }}" target="_blank" title="{{ post.title }}">
                        <span itemprop="name" itemprop=name>{{ post.title }}</span>
                    </a>
                </h1>                        
                <p itemprop="description">
                    {{ post.excerpt }}..
                </p>
                <p class="link_tags">{{ page.tags }}</p>
            </div>
        </div>
{% endfor %}
{% endfor %}
    </div>
</div>
{% endfor %}
</main>

{% endif %}
{% endfor %}
{% endfor %}
</ul>

我也试过这个,但它返回一个空白页

---
layout: layout
---
<ul>
{% for post in site.posts %}
{% for tag in post.tags %}
{% if tag == page.tag %}


{% assign counter=0 %}
<main id="page" role="main">
{% for category in tag.categories %}
<div class="col pane ui-layout-{% assign counter=counter | plus:1 %}" id="{{ page.id }}">
    <div class="colheader">
        <div class="bar"></div>
        <p class="lead">Leadin text</p>
        <h1>{{ category | first }}</h1>
    </div>
    <div class="colscroll unlock">

{% for posts in category %}
{% for post in tag.posts %}
        <div class="colblock" itemscope itemtype="http://schema.org/BlogPosting">    
            <div class="excerpt">
                <time class="date" datetime="{{ page.date | '%Y-%m-%dT%H:%i:%S-08:00' }}" itemprop="datePublished">
                    {{ page.date | date: '%B %d, %Y' }}
                </time>
                <h1>
                    <a itemprop="url" href="{{ post.url }}" target="_blank" title="{{ post.title }}">
                        <span itemprop="name" itemprop=name>{{ post.title }}</span>
                    </a>
                </h1>                        
                <p itemprop="description">
                    {{ post.excerpt }}..
                </p>
                <p class="link_tags">{{ page.tags }}</p>
            </div>
        </div>
{% endfor %}
{% endfor %}
    </div>
</div>
{% endfor %}
</main>

{% endif %}
{% endfor %}
{% endfor %}
</ul>

The live site template is up on Github。 (标签列表是页面顶部左起第二个圆形图标)

【问题讨论】:

    标签: jekyll liquid github-pages


    【解决方案1】:

    我想这就是你要找的东西:

    ---
    layout: default
    ---
    
    <main id="page" role="main">
    {% for category in site.categories %}
        {% assign counter=0 %}
        {% for posts in category %}
            {% for post in posts %}
                {% if post.tags contains page.tag %}
                    {% assign counter=counter | plus:1 %}
                {% endif %}
            {% endfor %}
        {% endfor %}
    
    {% if counter != 0 %}
    
    <div class="col pane ui-layout-{% assign counter=counter | plus:1 %}" id="{{ page.id }}">
        <div class="colheader">
            <div class="bar"></div>
            <p class="lead">Leadin text</p>
            <h1>{{ category | first }}</h1>
        </div>
        <div class="colscroll unlock">
    {% for posts in category %}
    {% for post in posts %}
    {% if post.tags contains page.tag %}
        <div class="colblock" itemscope itemtype="http://schema.org/BlogPosting">
            <div class="excerpt">
                <time class="date" datetime="{{ page.date | '%Y-%m-%dT%H:%i:%S-08:00' }}" itemprop="datePublished">
                    {{ page.date | date: '%B %d, %Y' }}
                </time>
            <h1>
                <a itemprop="url" href="{{ post.url }}" target="_blank" title="{{ post.title }}">
                    <span itemprop="name" itemprop=name>{{ post.title }}</span>
                </a>
            </h1>
            <p itemprop="description">
                {{ post.excerpt }}..
            </p>
            <p class="link_tags">{{ page.tags }}</p>
            </div>
        </div>
    {% endif %}
    {% endfor %}
    {% endfor %}
        </div>
    </div>
    {% endif %}
    {% endfor %}
    </main>
    

    我刚刚修改了你的主页代码。

    编辑:添加条件代码。仅打印包含带有当前标签的帖子的类别。

    【讨论】:

    • 嘿大卫,谢谢.. 但不完全.. 我坚持的部分是仅显示具有所选标签帖子的类别列。现在的方式是,它生成所有类别列并显示与所选标签匹配的帖子。我还需要过滤类别以避免出现几个不需要显示的空列。
    • 我已将您建议的代码推送到 repo 中,因此您可以根据需要实时查看。我认为这可能会扩展 Jekyll 的预期用途。
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 2015-11-09
    • 2019-03-26
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2014-01-19
    • 2022-01-18
    相关资源
    最近更新 更多