在Jekyll中,如何显示;“上周的帖子”;

在Jekyll中,如何显示;“上周的帖子”;,jekyll,liquid,Jekyll,Liquid,我不确定是否能获得流畅的语法来帮助我获取与构建日期在同一周内发布的帖子。可能吗 有更简单的方法可以获得最近的帖子列表,但这种方法对我的项目很有用。我已经尝试了通过搜索找到的一些东西,但还没有找到乐趣。你永远不知道Jekyll何时构建,所以Jekyll应该输出一个大的(ger)帖子列表。您可以使用Joonas的代码进行此操作。然后,您应该使用javascript隐藏不相关的帖子(那些超过一周的帖子) 这可以通过向列表中添加自定义属性轻松完成,如下所示: {{{post.title} 使用jQue

我不确定是否能获得流畅的语法来帮助我获取与构建日期在同一周内发布的帖子。可能吗


有更简单的方法可以获得最近的帖子列表,但这种方法对我的项目很有用。我已经尝试了通过搜索找到的一些东西,但还没有找到乐趣。

你永远不知道Jekyll何时构建,所以Jekyll应该输出一个大的(ger)帖子列表。您可以使用Joonas的代码进行此操作。然后,您应该使用javascript隐藏不相关的帖子(那些超过一周的帖子)

这可以通过向列表中添加自定义属性轻松完成,如下所示:

  • {{{post.title}
  • 使用jQuery(或vanilla js)隐藏旧帖子:

    //循环浏览带有日期的所有列表项
    $('li[date]')。每个(函数(){
    //在日期对象中创建postDate
    var postDate=新日期($(this.attr('Date'));
    //创建日期为一周前的对象
    var oneWeekAgo=新日期();
    oneWeekAgo.setDate(oneWeekAgo.getDate()-7);
    //比较日期并隐藏旧帖子
    如果(后发日期)
    

    在给出这个答案之前,请考虑以下事实:至少答案的第一部分并不真正有效,因为Jykyl是静态站点生成器,因此所显示的帖子与最近的构建日期有关,这可能与当前日期不一样。

    答案的第二部分更深入地探讨了实际生成“最近的帖子”列表的想法,而不是“上周的帖子”

    基本上用文字解释代码:首先我们得到
    本年度
    本周
    ,然后我们循环浏览每个帖子,将
    本年度
    本周
    与帖子的
    进行比较。如果它们匹配,就会显示帖子

    展示-构建周:

    展会-最新发布日和6天前

    {%assign latestPost_year=site.posts.first.date | date:%Y%%
    {%assign latestPost_day=site.posts.first.date | date:“%j”|加上:0%}
    {%assign latestPost_day_减去_week=site.posts.first.date | date:“%j”|减去:7%}
    {%-用于站点中的帖子。帖子-%}
    {%assign postYear=post.date |日期:“%Y”%}
    {%assign postDay=post.date | date:“%j”|加:0%}
    {%-如果latestPost_year==postYear and postDay>latestPost_day_减去周和postDay
    这是可行的,但不会跨越几年

    因此,我利用了这些概念,提出了一个更简单、更灵活的解决方案,用于过滤
    时间段(可以是秒、小时、天、周或月的任何可变时间跨度)。我的解决方案具有更少的变量和更少的逻辑

    Liquid
    date/time
    使用unix时间戳(
    %s=seconds,自1970年以来
    )。因此我将
    时间段保持为秒,并对时间长度进行转换。
    86400=1天
    604800=1周
    2678400=31天
    ,…等等

    该代码还假设您的帖子使用了
    last_modified_at
    ,如果您没有使用,您可以用
    post.date

    简单解

    列出上周发布的帖子

    {% assign timeframe = 604800 %}
    
    {% for post in site.posts %}
      {% assign post_in_seconds = post.last_modified_at | date: "%s" | plus: 0 %}
      {% assign recent_posts = "now" | date: "%s" | minus: timeframe  %}
    
      {% if post_in_seconds > recent_posts %}
        <a href="{{ post.url }}">{{ post.title }}</a>
      {% endif %}
    {% endfor %}
    

    这需要Jekyll每天构建。这不是一个非常现实的场景。我仍然喜欢这段代码。在HTML中获得大致正确的帖子或使用cron每天构建(使用Travis CI)是很好的。通过Travis CI和对这段代码的一些小调整,您还可以安排帖子(使用Jekyll中的“未来”选项)。我认为这个答案仍然有一定的价值。它确实有一定的作用…这取决于你想从这个帖子列表中得到什么以及你如何命名。-如果你上次更新了这个网站,比如说一年前,这个帖子列表将包含相对于上次更新(构建日期)的“最近帖子”.然而,事实上,如果你继续对网站进行类似的风格更改,并且在不发布任何新帖子的情况下构建网站,那么它可能会失败……为了清晰起见,我修改了我的问题。我所说的“今天”或“现在”是什么意思是当前的生成日期。本质上,我正在寻找一种在生成日期后7天内显示帖子的方法。@DylanKinnett因为代码没有完全满足您的要求,所以我添加了更多的代码,这些代码实际上满足了您的要求,我还添加了一些图像,以更好地说明每一个代码的工作原理。我觉得值得再说一遍……Usi如果距离上一篇文章已经超过一周了,并且你在调整布局后重新构建了网站,或者添加了新页面或其他不是新博客文章的内容,那么将
    构建日期
    发布日期
    进行比较的代码可能不会显示任何内容。将
    最新发布日期
    进行比较的代码e> post date
    在这个意义上更具防弹性。虽然这看起来是一个不错的方法,但我想我更喜欢Joonas描述的那种只使用jekyll的解决方案。没有只使用jekyll的方法。jekyll网站就像预压的杂志。你永远不知道什么时候会被阅读。唯一的例外是,Requireres是一个cron任务,每天都会重建您的站点。
    {% assign currentYear = site.time | date: "%Y" %}
    {% assign currentDay = site.time | date: "%j" | plus: 0 %}
    {% assign currentDay_minus_week = site.time | date: "%j" | minus: 7  %}
    
    {%- for post in site.posts -%}
        
        {% assign postYear = post.date | date: "%Y" %}
        {% assign postDay = post.date | date: "%j" | plus: 0 %}
        
        {%- if currentYear == postYear and postDay > currentDay_minus_week and postDay <= currentDay  -%}
            <a href="{{ post.url }}">{{ post.title }}</a>
        {%- endif -%}
        
    {%- endfor -%}
    
    {% assign latestPost_year = site.posts.first.date | date: "%Y"  %}
    {% assign latestPost_week = site.posts.first.date | date: "%W"  %}
    
    {%- for post in site.posts -%}
        
        {% assign postYear = post.date | date: "%Y" %}
        {% assign postWeek = post.date | date: "%W" %}
        
        {%- if latestPost_year == postYear and latestPost_week == postWeek -%}
            <a href="{{ post.url }}">{{ post.title }}</a>
        {%- endif -%}
        
    {%- endfor -%}
    
    {% assign latestPost_year = site.posts.first.date | date: "%Y"  %}
    {% assign latestPost_day = site.posts.first.date | date: "%j" | plus: 0  %}
    {% assign latestPost_day_minus_week = site.posts.first.date | date: "%j" | minus: 7  %}
    
    {%- for post in site.posts -%}
        
        {% assign postYear = post.date | date: "%Y" %}
        {% assign postDay = post.date | date: "%j" | plus: 0 %}
        
        {%- if latestPost_year == postYear and postDay > latestPost_day_minus_week and postDay <= latestPost_day  -%}
            <a href="{{ post.url }}">{{ post.title }}</a>
        {%- endif -%}
        
    {%- endfor -%}
    
    {% assign timeframe = 604800 %}
    
    {% for post in site.posts %}
      {% assign post_in_seconds = post.last_modified_at | date: "%s" | plus: 0 %}
      {% assign recent_posts = "now" | date: "%s" | minus: timeframe  %}
    
      {% if post_in_seconds > recent_posts %}
        <a href="{{ post.url }}">{{ post.title }}</a>
      {% endif %}
    {% endfor %}
    
    {% assign timeframe = 2419200 %}
    {% assign maxposts = 10 %}
    {% assign date_format = site.minima.date_format | default: "%m/%d" %}
    
    <ul class="post-list text-muted list-unstyled">
    {% for post in site.posts limit: maxposts %}
      {% assign post_in_seconds = post.last_modified_at | date: "%s" | plus: 0 %}
      {% assign recent_posts = "now" | date: "%s" | minus: timeframe %}
      {% assign post_updated = post.last_modified_at | date: date_format %}
      {% capture post_date %}<small>{{ post.date | date: date_format }}</small>{% endcapture %}
    
      {% if post_in_seconds > recent_posts %}
      {% capture label_new %}<span class="label label-primary">new</span>{% endcapture %}
        {% if post.last_modified_at > post.date %}
          {% assign label_new = '' %}{% comment %}Clear NEW if modified{% endcomment %}
          {% capture label_updated %}<span class="label label-info">Updated <span class="badge">{{ post_updated }}</span></span>{% endcapture %}
        {% endif %}
      {% endif %}
      <li>
        <h4>{{ post_date }}
          <a class="post-link" href="{{ post.url | relative_url }}">
            {{ post.title | escape }}</a> {{ label_new }}{{ label_updated }}
          </h4>
      </li>
      {% assign post_date = '' %}
      {% assign label_updated = '' %}
    {% endfor %}
    </ul>