2015-06-19 16 views
6

Das macht mich verrückt.Jekyll: kann Sammlung nach Datum nicht sortieren

Ich habe diese Sammlung resources:

# _config.yml 
collections: 
    resources: 
    output: true 
    permalink: /resources/:name/ 

Sie haben alle Termine:

# /_resources/example.md 
--- 
title: Learn the Web 
date: 09-04-2013 
--- 

Die Seiten erzeugt werden, und wenn ich versuche, es ist das Datum anzuzeigen, wird es richtig angezeigt, aber ich möchte auch diese nach Datum sortieren, und es funktioniert einfach nicht. Was mache ich falsch?

{% assign sortedResources = site.resources | sort: 'date' %} <!-- Doesn't work --> 
{% for resource in sortedResources %} 
    <div> 
    {{resource.title}} 
    <small>{{resource.date | date: "%d %b %Y"}}</small> <!-- Works --> 
    </div> 
{% endfor %} 

Ich verwende:

▶ ruby --version 
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux] 
▶ jekyll --version 
jekyll 2.5.3 

Dank

+0

GOD. Das hat mich verrückt gemacht. Ich dachte, ich würde meine Meinung verlieren. –

Antwort

3

ich zur Zeit das gleiche Problem mit einer Sammlung zu erleben.

Bei dem Versuch, nach europäisch formatierten Daten wie oder dd-mm-yyyy zu sortieren, erhalte ich eine String-Sortierung. Auch wenn timezone: Europe/Paris in der Datei _config.yml festgelegt ist.

Die einzige Möglichkeit, eine Sammlung nach Datum sortiert zu erhalten, ist das ISO-Format yyyy-mm-dd.

# /_resources/example.md 
--- 
title: Learn the Web 
date: 2013-04-09 
--- 

Und die Sortierung funktioniert jetzt.

bearbeiten - So jekyll schafft 'Termine':

date: "2015-12-21" # String 
date: 2015-12-1 # String D not zero paded 
date: 01-12-2015 # String French format 
date: 2015-12-01 # Date 
date: 2015-12-21 12:21:22 # Time 
date: 2015-12-21 12:21:22 +0100 # Time 

Wenn Sie Zeit brauchen Sie nicht auf die date: YYYY-MM-DD Format haften können. Und Sie müssen konsistent über Ihre Sammlung sein. Wenn Sie String mischen, Datum und/oder Uhrzeit Flüssigkeit wird ein Fehler wie Liquid error: comparison of Date with Time failed oder Liquid error: comparison of String with Date failed

+0

Ich habe dies versucht, um meine Sammlungen sortieren zu lassen und es funktioniert nicht für mich. In der Tat kann ich nicht ergründen, wie die Sammlung sortiert wird. Irgendwelche anderen Ideen, wonach ich suchen sollte? – ChrisChinchilla

+0

Haben Sie ein Problem für dieses spezielle Problem gemeldet? Ich habe etwas ähnliches eingereicht: https: // github.com/jekyll/jekyll/issues/4687 –

+0

@LorenRogers, siehe meine Antwort bearbeiten. Dies ist kein Fehler. –

2

ich es bekommen habe: die Ressourcen, bei denen durch die Datumszeichenfolge sortiert (zB 19-06-2015.), Die nicht korrekt war.

habe ich meine benutzerdefinierten Filter statt:

# _plugins/filters.rb 
module Jekyll 
    module DateFilter 
    require 'date' 
    def date_sort(collection) 
     collection.sort_by do |el| 
     Date.parse(el.data['date'], '%d-%m-%Y') 
     end 
    end 
    end 
end 
Liquid::Template.register_filter(Jekyll::DateFilter) 

wie so verwendet:

{% assign sortedResources = site.resources | date_sort | reverse %} 
{% for resource in sortedResources %} 
    <div>{{resource.title}}</div> 
{% endfor %} 
5

Wenn Collection-Elemente haben eine gültige date (ISO 8601 format) in der Titelei werfen sie werden automatisch nach Datum sortiert werden, älteste zuerst.

Wenn Sie möchten, dass die Ausgabe neuere Artikel zuerst können Sie die Reihenfolge wie so reverse:

{% assign sorted = site.resources | reverse %} 
{% for item in sorted %} 
    <h1>{{ item.name }}</h1> 
    <p>{{ item.content }}</p> 
{% endfor %}