如何使用 Jekyll/Liquid 对嵌套数据进行排序
How can I sort nested Data with Jekyll/Liquid
是否可以对嵌套数据进行排序?
我用assign试了一下,但是出现错误:
Cannot sort a null object
我的液体代码
<ol>
{% for fuehrung2 in site.data.programmfk %}
{% assign fuehrung1 = fuehrung2['fuehrungen'] | sort: "start" %}
{% for fuehrung in fuehrung1 %}
<li>{{ fuehrung.titel }}<br>{{ fuehrung.start | date: "%H:%M" }}{% if fuehrung.ende != nil %}–{{ fuehrung.ende | date: "%H:%M" }}{% endif %} Uhr <span style="color:#cc0000">⟩</span> Treffpunkt: {{ fuehrung.treffpunkt | join: " & " }}</li>
{% endfor %}
{% endfor %}
</ol>
我的programmfk.yml(只是……的一小部分)
- nummer: "04"
titel: Elektrotechnik und Informationstechnik
infostand: Lothstraße 64
gespraech:
start: 2020-03-28 10:00
ende: 2020-03-28 15:00
punkte:
- Vertiefungsrichtung Kommunikationstechnik
- Demos Labor Schaltungstechnik
- Robotikwerkstatt
- Smart Car
- Computer Kicker
praesentation:
start:
ende:
punkte:
vortraege:
- titel: Vorstellung der Studiengänge
start: 2020-03-28 11:00
ende: 2020-03-28 12:00
raum: E 0.103
fuehrungen:
- titel: Nachrichtensatellitentechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:30
ende: 2020-03-28 13:00
- titel: Aufbau- und Verbindungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:00
ende: 2020-03-28 13:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:30
ende: 2020-03-28 14:00
我正在尝试按开始时间 start
排序 fuehrungen
。
@david-jacquel
如果我在 fuehrungen
在线使用 yml 文件,它就可以正常工作。
我的fuehrungen.yml
fuehrungen:
- titel: Motorenlabor
treffpunkt: Infostand der Fakultät
start: 2020-03-28 11:00
ende: 2020-03-28 11:45
- titel: Motorenlabor
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:45
- titel: Nachrichtensatellitentechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:30
ende: 2020-03-28 13:00
- titel: Aufbau- und Verbindungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:00
ende: 2020-03-28 13:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:30
ende: 2020-03-28 14:00
- titel: Einführung und experimentelle Laborführung Technische Redaktion und Kommunikation
treffpunkt: Infostand der Fakultät
start: 2020-03-28 11:45
ende: 2020-03-28 12:30
- titel: Führung Bereich Papier und Verpackung (Labore, Maschinenhalle etc.)
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:15
ende: 2020-03-28 13:00
- titel: "Laborführung: Studiengang Druck- und Medientechnik „Produktion von Fotobüchern“"
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:50
ende: 2020-03-28 14:15
Liquid/HTML
{% assign fuehrungSort = site.data.fuehrungen['fuehrungen'] | sort: "start" %}
{% for fuehrung in fuehrungSort %}
<li><b>{{ fuehrung.start | date: "%H:%M" }} Uhr</b> {{ fuehrung.titel }}</li>
{% endfor %}
但在我原来的 programmfk.yml
我之前还有一个级别,我无法获得那个级别的结果。
- nummer:
…
fuehrungen:
- title:
…
如您的 repository 所示,您的代码中某处隐藏了一个空 vortraege :
- nummer: "13"
titel: Studium Generale und Interdisziplinäre Studien
infostand: Lothstraße 64
gespraech:
start: 2020-03-28 10:00
ende: 2020-03-28 15:00
punkte:
praesentation:
start:
ende:
punkte:
vortraege:
fuehrungen:
在您的代码中,vortraege['vortraege']
可以为 null 或空,并且不包含包含要排序的 start
字段的对象。这解释了你的错误。
您可以在排序前测试是否有任何要排序的内容{% if vortraege['vortraege'].size %}
这给出了:
<ol>
{% for vortraege in site.data.programmfk %}
{% if vortraege['vortraege'].size %}
{% assign vortraegeSort = vortraege['vortraege'] | sort: 'start' %}
{% for vortrag in vortraegeSort %}
<li><b>{{ vortrag.start | date: "%H:%M" }} Uhr</b> {{ vortrag.titel }}</li>
{% endfor %}
{% endif %}
{% endfor %}
</ol>
编辑:一次性对 programmfk
数据文件中的所有 vortraege
进行排序
{% comment %} --- Create an empty array --- {% endcomment %}
{% assign vortraege_all = '' | split: '' %}
{% for vortraege in site.data.programmfk %}
{% comment %} --- Only if vortraege['vortraege'] contains something
-- {% endcomment %}
{% if vortraege['vortraege'].size %}
{% comment %} --- Concatenate vortraege_all and current non-empty vortraege['vortraege'] --- {% endcomment %}
{% assign vortraege_all = vortraege_all | concat: vortraege['vortraege'] %}
{% endif %}
{% endfor %}
{% comment %} ----------- Sorting -------------- {% endcomment %}
{% assign vortraege_all = vortraege_all | sort: 'start' %}
<ol>
{% for v in vortraege_all %}
<li><b>{{ v.start | date: "%H:%M" }} Uhr</b> {{ v.titel }}</li>
{% endfor %}
</ol>
是否可以对嵌套数据进行排序?
我用assign试了一下,但是出现错误:
Cannot sort a null object
我的液体代码
<ol>
{% for fuehrung2 in site.data.programmfk %}
{% assign fuehrung1 = fuehrung2['fuehrungen'] | sort: "start" %}
{% for fuehrung in fuehrung1 %}
<li>{{ fuehrung.titel }}<br>{{ fuehrung.start | date: "%H:%M" }}{% if fuehrung.ende != nil %}–{{ fuehrung.ende | date: "%H:%M" }}{% endif %} Uhr <span style="color:#cc0000">⟩</span> Treffpunkt: {{ fuehrung.treffpunkt | join: " & " }}</li>
{% endfor %}
{% endfor %}
</ol>
我的programmfk.yml(只是……的一小部分)
- nummer: "04"
titel: Elektrotechnik und Informationstechnik
infostand: Lothstraße 64
gespraech:
start: 2020-03-28 10:00
ende: 2020-03-28 15:00
punkte:
- Vertiefungsrichtung Kommunikationstechnik
- Demos Labor Schaltungstechnik
- Robotikwerkstatt
- Smart Car
- Computer Kicker
praesentation:
start:
ende:
punkte:
vortraege:
- titel: Vorstellung der Studiengänge
start: 2020-03-28 11:00
ende: 2020-03-28 12:00
raum: E 0.103
fuehrungen:
- titel: Nachrichtensatellitentechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:30
ende: 2020-03-28 13:00
- titel: Aufbau- und Verbindungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:00
ende: 2020-03-28 13:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:30
ende: 2020-03-28 14:00
我正在尝试按开始时间 start
排序 fuehrungen
。
@david-jacquel
如果我在 fuehrungen
在线使用 yml 文件,它就可以正常工作。
我的fuehrungen.yml
fuehrungen:
- titel: Motorenlabor
treffpunkt: Infostand der Fakultät
start: 2020-03-28 11:00
ende: 2020-03-28 11:45
- titel: Motorenlabor
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:45
- titel: Nachrichtensatellitentechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:00
ende: 2020-03-28 12:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:30
ende: 2020-03-28 13:00
- titel: Aufbau- und Verbindungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:00
ende: 2020-03-28 13:30
- titel: Regelungstechnik
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:30
ende: 2020-03-28 14:00
- titel: Einführung und experimentelle Laborführung Technische Redaktion und Kommunikation
treffpunkt: Infostand der Fakultät
start: 2020-03-28 11:45
ende: 2020-03-28 12:30
- titel: Führung Bereich Papier und Verpackung (Labore, Maschinenhalle etc.)
treffpunkt: Infostand der Fakultät
start: 2020-03-28 12:15
ende: 2020-03-28 13:00
- titel: "Laborführung: Studiengang Druck- und Medientechnik „Produktion von Fotobüchern“"
treffpunkt: Infostand der Fakultät
start: 2020-03-28 13:50
ende: 2020-03-28 14:15
Liquid/HTML
{% assign fuehrungSort = site.data.fuehrungen['fuehrungen'] | sort: "start" %}
{% for fuehrung in fuehrungSort %}
<li><b>{{ fuehrung.start | date: "%H:%M" }} Uhr</b> {{ fuehrung.titel }}</li>
{% endfor %}
但在我原来的 programmfk.yml
我之前还有一个级别,我无法获得那个级别的结果。
- nummer:
…
fuehrungen:
- title:
…
如您的 repository 所示,您的代码中某处隐藏了一个空 vortraege :
- nummer: "13"
titel: Studium Generale und Interdisziplinäre Studien
infostand: Lothstraße 64
gespraech:
start: 2020-03-28 10:00
ende: 2020-03-28 15:00
punkte:
praesentation:
start:
ende:
punkte:
vortraege:
fuehrungen:
在您的代码中,vortraege['vortraege']
可以为 null 或空,并且不包含包含要排序的 start
字段的对象。这解释了你的错误。
您可以在排序前测试是否有任何要排序的内容{% if vortraege['vortraege'].size %}
这给出了:
<ol>
{% for vortraege in site.data.programmfk %}
{% if vortraege['vortraege'].size %}
{% assign vortraegeSort = vortraege['vortraege'] | sort: 'start' %}
{% for vortrag in vortraegeSort %}
<li><b>{{ vortrag.start | date: "%H:%M" }} Uhr</b> {{ vortrag.titel }}</li>
{% endfor %}
{% endif %}
{% endfor %}
</ol>
编辑:一次性对 programmfk
数据文件中的所有 vortraege
进行排序
{% comment %} --- Create an empty array --- {% endcomment %}
{% assign vortraege_all = '' | split: '' %}
{% for vortraege in site.data.programmfk %}
{% comment %} --- Only if vortraege['vortraege'] contains something
-- {% endcomment %}
{% if vortraege['vortraege'].size %}
{% comment %} --- Concatenate vortraege_all and current non-empty vortraege['vortraege'] --- {% endcomment %}
{% assign vortraege_all = vortraege_all | concat: vortraege['vortraege'] %}
{% endif %}
{% endfor %}
{% comment %} ----------- Sorting -------------- {% endcomment %}
{% assign vortraege_all = vortraege_all | sort: 'start' %}
<ol>
{% for v in vortraege_all %}
<li><b>{{ v.start | date: "%H:%M" }} Uhr</b> {{ v.titel }}</li>
{% endfor %}
</ol>