2015-06-19 16 views
6

Questo mi sta facendo impazzire.Jekyll: impossibile ordinare la collezione per data

ho questa collezione resources:

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

Hanno tutte le date:

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

Le pagine ottenere generati, e se provo a visualizzare è data, esso è visualizzato correttamente, ma io voglio anche ordinare quelli per data, e semplicemente non funziona. Che cosa sto facendo di sbagliato?

{% 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 %} 

sto usando:

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

Grazie

+0

DIO. Questo mi stava facendo impazzire. Pensavo di perdere la testa per un po 'lì. –

risposta

3

Attualmente sto vivendo lo stesso problema con le collezioni.

Durante il tentativo di ordinare su date formattate in Europa come dd/mm/yyyy o dd-mm-yyyy, ottengo un ordinamento di stringa. Anche quando timezone: Europe/Paris è impostato nel file _config.yml.

L'unico modo per ottenere una raccolta ordinata per data è utilizzare il formato ISO yyyy-mm-dd.

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

E l'ordinamento ora funziona.

Modifica - Questo è il modo Jekyll gestisce 'date':

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 

Se non avete bisogno di tempo si può attaccare al formato date: YYYY-MM-DD. E devi essere coerente nella tua collezione. Se si mescolano stringa, data e/o tempo liquido genera un errore come Liquid error: comparison of Date with Time failed o Liquid error: comparison of String with Date failed

+0

Ho provato questo per ottenere l'ordinamento delle mie raccolte e non funziona per me. In effetti non riesco a capire come stia ordinando la collezione. Qualche altra idea su cosa dovrei controllare? – ChrisChinchilla

+0

Hai presentato un problema per questo problema specifico? Ho inviato qualcosa di simile: https: // github.it/jekyll/jekyll/issues/4687 –

+0

@LorenRogers, vedi la mia risposta edit. Questo non è un bug. –

2

ho capito: le risorse in cui ordinate in base alla stringa di data (ad esempio 19-06-2015.), Che non era corretta.

ho creato il mio filtro personalizzato invece:

# _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) 

Utilizzato in questo modo:

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

Se i vostri articoli Collezione hanno una valida date (ISO 8601 format) in materia fronte essi saranno ordinati per data automaticamente, prima i più vecchi.

Se vuoi per l'output articoli più recenti primo luogo è possibile reverse l'ordine in questo modo:

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