2016-04-30 4 views
1

Ich versuche, eine Liste von Seiten innerhalb einer Sammlung nach Tags gruppiert. Ich weiß, das mit Jekyll leicht möglich ist, die eingebaute in site.tags-Funktion, die ich (und haben), wie mit etwas erreichen:Auflistung der Jekyll Collection-Seiten nach Tags

<h3>Tags</h3> 

{% for tag in site.tags %} 
    {% assign t = tag | first %} 
    {% assign posts = tag | last %} 

<h4><a name="{{t | downcase | replace:" ","-" }}"></a><a class="internal" href="/tagged/#{{t | downcase | replace:" ","-" }}">{{ t | downcase }}</a></h4> 

<ul> 
{% for post in posts %} 
    {% if post.tags contains t %} 
    <li> 
    <a href="{{ post.url }}">{{ post.title }}</a> 
    <span class="date">{{ post.date | date: "%B %-d, %Y" }}</span> 
    </li> 
    {% endif %} 
{% endfor %} 
</ul> 

<hr> 

{% endfor %} 

Um diese zu bekommen:

Grouped by tags

Ich möchte um die site.tags-Funktion in einer Sammlung namens note zu replizieren. Tags in meinen Sammlungen werden gruppiert, wie sie für Posts sind, unter Verwendung von beispielsweise tags: [urban growth, California, industrialization] in dem YAML-Header. Aber ich möchte stattdessen mit einer Sammlung arbeiten. Ich kann fast erreichen, was ich will mit den folgenden:

{% assign collection = site.note | group_by: "tags" | uniq %} 
{% for group in collection %} 
{% comment %} This is super hacky and I don't like it {% endcomment%} 
    <h3>{{ group.name | replace: '"', '' | replace: '[', '' | replace: ']', '' }}</h3> 
    <ul> 
    {% for item in group.items %} 
    <li><a href="{{ item.url | prepend: site.baseurl | prepend: site.url }}">{{ item.title }}</a></li> 
    {% endfor %} 
    </ul> 
{%endfor%} 

Aber wie Sie wahrscheinlich sehen können, brechen diese Tags nicht aus in ihrer einzigartigen Gruppen; Stattdessen wird jede Gruppe von Tags in der YAML als einzelnes großes Tag behandelt. Irgendwelche Hinweise zum Erstellen des Arrays eindeutiger Tags und zum Auflisten der Collection-Seiten darunter?

Antwort

10

Versuchen Sie folgendes:

{% assign tags = site.note | map: 'tags' | join: ',' | split: ',' | uniq %} 
{% for tag in tags %} 
    <h3>{{ tag }}</h3> 
    <ul> 
    {% for note in site.note %} 
    {% if note.tags contains tag %} 
    <li><a href="{{ site.baseurl }}{{ note.url }}">{{ note.title }}</a></li> 
    {% endif %} 
    {% endfor %} 
    </ul> 
{% endfor %} 
+0

so toll gearbeitet, danke! –

1

Die tags Zuweisungsverfahren in David Jacquel Antwort erwähnt vereinfacht werden kann:

{% assign tags = site.note | map: 'tags' | uniq %}