2011-08-17 46 views
12

Tôi đang sử dụng chất lỏng với Jekyll để gửi ngày trên trang web ban nhạc của tôi (http://longislandsound.com.au)ngày So sánh trong chất lỏng

Những gì tôi muốn là để tự động ẩn ngày cũ, vì vậy tôi don' t phải đi vào và xóa chúng một lần nữa. Tôi nghĩ cách tốt nhất để làm điều đó là so sánh ngày đăng bài với ngày hiện tại và chỉ hiển thị bài đăng nếu ngày đó trong tương lai, nhưng tôi không thể tìm ra cách để làm điều này.

Đây là mã hiện tại:

<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> 

Tôi đã thử một số câu lệnh if, nhưng tôi không thể tìm ra cách để so sánh ngày đường bưu điện đến ngày hiện tại.

Có ai giúp được không?

Trả lời

25

Dựa trên date-math-manipulation-in-liquid-template-filterget-todays-date-in-jekyll-with-liquid-markup, bạn sẽ có thể sử dụng một sự kết hợp của {{'now'}} hoặc {{site.time}} và khó tìm unix ngày timestamp lọc | date: '%s'

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

chụp số có thể đóng vai trò như dây đàn, không số, và có thể nhập trở lại các số bằng cách sử dụng hack sau:

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

Có cách nào để lọc bài đăng chỉ bao gồm các sự kiện trong tương lai bên ngoài vòng lặp không? Tôi thử nghiệm hình ảnh 'now' và' event.date' sẽ tốn kém khi số lượng sự kiện tăng lên. Họ đề cập đến việc sử dụng 'with_scope' [ở đây] (https://groups.google.com/forum/#!topic/locomotivecms/4-3gZbv03V0), nhưng Jekyll không nhận ra đó là một thẻ. – Roy

+0

Điều này vô cùng hữu ích, cảm ơn bạn! – aaandre

2

Mặc dù mã này hoạt động:

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

Nó chỉ được thực hiện trong khi xây dựng. Nếu bạn muốn trang web của bạn thực sự cập nhật tự động, bạn nên để javascript làm ẩn.

Start with lỏng này:

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

Và thêm javascript này:

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(); 
}); 

Các giải pháp đã được tìm thấy ở đây: http://jekyllcodex.org/without-plugin/future-dates/


UPDATE (2018/02/19):
CloudCannon hiện đã lên kế hoạch xây dựng, nơi bạn có thể chỉ cần chỉ định để xây dựng dự án của bạn một lần một ngày. Nếu bạn sử dụng CloudCannon, tôi khuyên bạn nên trả lời người dùng [here].

+1

Không có jquery xin vui lòng. –

+0

Viết lại điều này cho jQuery không phải là siêu đơn giản. – JoostS

+1

Tôi không có ý định học một công nghệ lạc hậu 10 tuổi, và tôi cũng không dự định thực hiện phỏng đoán. Trong hình thức hiện tại của nó câu trả lời này là vô ích với tôi, nhưng nếu bạn viết lại nó mà không cần sử dụng jQuery tôi sẽ loại bỏ downvote của tôi. –