2017-08-15 1 views
0

Wie kann ich Elemente aus einer Datendatei in einer bestimmten Reihenfolge ausgeben?Jekyll Daten manuelle Ausgabeauftrag


Lassen Sie uns sagen, dass meine Datendatei sieht wie folgt aus:

[{ 
    "name": "Tim" 
}, { 
    "name": "Paul" 
}, { 
    "name": "Brian" 
}, { 
    "name": "James" 
}, { 
    "name": "Mark" 
}] 

Ohne wirklich genug zu setzen tought hinein, schrieb ich folgendes:

{% for item in site.data.example %} 

    {% if 
    item.name == "Mark" or 
    item.name == "Brian" or 
    item.name == "James" 
    %} 
    <div> 
    {{ item.name }} 
    </div> 
    {% endif %} 

{% endfor %} 

... das wird offensichtlich Ausgabe:

<div>Brian</div> 
<div>James</div> 
<div>Mark</div> 

. ..when ich die Reihenfolge sein wollte:

<div>Mark</div> 
<div>Brian</div> 
<div>James</div> 

Ich konnte nicht einen Weg gefunden, um eine bestimmte Reihenfolge zu zwingen, anders als die Reihenfolge, in der Datendatei zu ändern, aber das ist kein gangbarer Weg für mich.

+0

P.S. Ich habe nicht viel Erfahrung im Umgang mit Dateien im Allgemeinen. – Joonas

+0

Ist das eine JSON-Datei? – marcanuy

+0

@marcanuy, ja ist es. – Joonas

Antwort

1

Erstellen Sie einen Index mit der gewünschten Reihenfolge, es könnte in einer anderen Datei oder direkt als Liquid-Array sein.

dann für jedes Element in dem Index, durchqueren die Datendatei Verarbeitung des einen chosing, die es matchs:

{% assign listorder = "Mark,Brian,James" |split: ","%} 
{% for order in listorder %} 
{% for data in site.data.mydata %} 
{% if data['name']==order%} 
{{data['name']}}, 
{% endif %} 
{% endfor%} 

{% endfor %} 

Ausgang:

Mark, Brian, James, 

Um die Reihenfolge in einer Datendatei haben

Erstellen _data/order.yml:

- Mark 
- Brian 
- James 

Dann in dem Code verwenden: {% for order in site.data.order %}

+0

Danke. Von dir stört es mich nicht zu fragen ... Gibt es eine Möglichkeit, dies zu einer benutzerdefinierten Funktion (oder etwas) zu machen, so dass ich es an mehreren Stellen auf verschiedenen Seiten verwenden könnte. Wie: 'getInfo (" Mark, Brian, James ") und" getInfo "(" Brian, Paul, Tim "). Ich bestehe nicht darauf, dieses genaue Format zu verwenden, sondern muss nur auf eine Art und Weise suchen, diesen Code auf sinnvolle Weise zu wiederholen. – Joonas

+0

Beste Option wäre, mehrere Dateien mit der Bestellung zu erstellen, ich habe die Frage damit aktualisiert. – marcanuy

+0

Leider ist das keine Option, da es sich um eine 50-MB-JSON-Datei handelt, die nicht manuell bearbeitet werden kann und jeder Datenstapel, den ich herauspicke, in einer beliebigen Reihenfolge vorliegen muss. – Joonas