2011-08-17 9 views
12

sto usando liquido con Jekyll di inviare le date sul sito web della mia band (http://longislandsound.com.au)date confrontando in liquido

Quello che voglio è quello di nascondere automaticamente i vecchi date, così ho don' t devono entrare e cancellarli di nuovo. Penso che il modo migliore per farlo sarebbe quello di confrontare la data del post con la data corrente e visualizzare solo il post se la data è in futuro, ma non riesco a capire come farlo.

Ecco il codice corrente:

<ul id="dates"> 
{% for post in site.posts reversed %} 
<a href="{{post.link}}"> 
<li> 
    <div class="date"> 
     <span class="day">{{post.date | date: "%d"}}</span><br /> 
     <span class="month">{{post.date | date: "%b"}}</span> 
     <span class="week">{{post.date | date: "%a"}}</span> 
    </div> 
    <div class="details"> 
     <span class="venue">{{post.venue}}</span><br /> 
     <span class="town">{{post.town}}</span> 
    </div> 
</li> 
</a> 
{% endfor %} 
</ul> 

Ho provato alcuni se le dichiarazioni, ma non riesco a capire come confrontare la data post per la data corrente.

Qualcuno può aiutare?

risposta

25

Sulla base date-math-manipulation-in-liquid-template-filter e get-todays-date-in-jekyll-with-liquid-markup, si dovrebbe essere in grado di utilizzare una combinazione di {{'now'}} o {{site.time}} e la difficile trovare filtro unix data timestamp | date: '%s'

{% capture nowunix %}{{'now' | date: '%s'}}{% endcapture %} 
{% capture posttime %}{{post.date | date: '%s'}}{% endcapture %} 
{% if posttime < nowunix %} 
...show posts... 

Catturato numeri possono agire come stringhe, non numeri, e può essere di tipo gettato di nuovo a numeri utilizzando il seguente trucco:

{% assign nowunix = nowunix | plus: 0 %} 
+0

C'è un modo per filtrare i post per includere solo eventi futuri al di fuori di un ciclo? I test di imaging 'now' vs.' event.date' sarebbero costosi con il crescere del numero di eventi. Esse menzionano l'uso di 'with_scope' [qui] (https://groups.google.com/forum/#!topic/locomotivecms/4-3gZbv03V0), ma Jekyll non lo riconosce come tag. – Roy

+0

Questo è stato incredibilmente utile, grazie! – aaandre

2

Anche se questo codice funziona:

{% capture nowunix %}{{'now' | date: '%s'}}{% endcapture %} 
{% capture posttime %}{{post.date | date: '%s'}}{% endcapture %} 
{% if posttime < nowunix %} ...show posts... 

Viene eseguito solo durante la compilazione. Se vuoi che il tuo sito web si aggiorni automaticamente, dovresti lasciare che javascript si nasconda.

Inizia con questo liquido:

{% for item in site.events %} 
    <div future-date="{{ item.date | date: '%Y%m%d' }}">...</div> 
{% endfor %} 

e aggiungi a javascript:

function getCompareDate() { 
    var d = new Date(), 
     month = '' + (d.getMonth() + 1), 
     day = '' + d.getDate(), 
     year = d.getFullYear(); 
    if (month.length < 2) month = '0' + month; 
    if (day.length < 2) day = '0' + day; 
    return [year, month, day].join(''); 
} 

$('[future-date]').each(function() { 
    if($(this).attr('future-date') < getCompareDate()) $(this).hide(); 
}); 

La soluzione è stata trovata qui: http://jekyllcodex.org/without-plugin/future-dates/


UPDATE (2018/02/19):
CloudCannon ora ha build pianificati in cui è possibile semplicemente specificare di creare il progetto una volta al giorno. Se si utilizza CloudCannon, si consiglia la risposta dell'utente [here].

+1

No jquery per favore. –

+0

Riscrivere ciò su non jQuery è semplicissimo. – JoostS

+1

Non ho intenzione di imparare una tecnologia obsoleta di 10 anni, e non ho intenzione di fare neanche una congettura. Nella sua forma attuale questa risposta è inutile per me, ma se la riscrivi senza usare jQuery rimuoverò il mio downvote. –