使用Jekyll显示具有不同类别的菜单

时间:2015-05-29 10:32:11

标签: jekyll

我想显示一个只显示不同类别的菜单。

想象一下,有以下结构:

_folder1

  1. com1.html
  2. com2.html
  3. com3.html
  4. 现在,让我只关注三个文件。

    对于_folder1中包含的每个文件,您都有以下YAML MATTER

    标题:1文件
    类型:y
    项目:1

    TITLE:2File
    类型:y
    项目:1

    TITLE:3File
    类型:y
    项目:2

    现在,我想显示以下列表:

    项目

    • 1
    • 2

    我不想要双人1。

    在杰基尔达到目标的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

这是可能的,但你需要一些非常丑陋的字符串操作黑客来实现它。

据我所知,Liquid自己创建阵列没有正确的方法 因此,以下90%的解决方案包括滥用字符串以创建数组。

<!-- Step 1: create an array with all projects (with duplicates) -->

{% for page in site.pages %}
    {% if page.project %}
        {% capture tmp %}{{ tmp }}#{{ page.project }}{% endcapture %}
    {% endif %}
{% endfor %}

{% assign allprojects = tmp | remove_first: '#' | split: '#' | sort %}


<!-- Step 2: create an array of unique projects (without duplicates) -->

{% for project in allprojects %}
    {% unless tmp2 contains project %}
        {% capture tmp2 %}{{ tmp2 }}#{{ project | strip }}{% endcapture %}
    {% endunless %}
{% endfor %}

{% assign uniqueprojects = tmp2 | remove_first: '#' | split: '#' | sort %}


<!-- Step 3: display unique projects -->

<h1>Projects:</h1>
<ul>
{% for project in uniqueprojects %}
    <li>{{project}}</li>
{% endfor %}
</ul>

最后,第3步将生成以下HTML ...完全按照要求生成:

<h1>Projects:</h1>
<ul>
    <li>1</li>
    <li>2</li>
</ul>