从Statamic Grid Field中提取下一个即将到来的日期/时间?

时间:2014-01-18 19:01:08

标签: statamic

在一个基于Statamic 1.6.7的剧场网站上,我想用一个网格场进行表演(他们每周六晚上有几周的节目),我只想展示下一场即将到来的节目。

示例显示数据:

show_performances:  
  -   
    g_show_date: 2014-01-30  
    g_show_time: 07:00 PM  
  -  
    g_show_date: 2014-02-31  
    g_show_time: 07:00 PM  
  -   
    g_show_date: 2014-03-31  
    g_show_time: 07:00 PM  

更新1号(2014年2月1日)

这是我的代码,我正在尝试David S建议使用{{ g_show_date|in_future }}

{{ show_performances }}  
    {{ if g_show_date|in_future }}   
    <p>{{ g_show_date }} @ {{ g_show_time }}</p>  
    {{ endif }}  
{{ /show_performances }}  

哪种方法很好,但它显示了所有未来的节目(2014-02-31和2014-03-31)。我尝试用{{ if first }}条件包装输出,正如预期的那样,仍然列出了后续的表现。

关于如何将输出限制为 next 性能的任何想法,而不是后续的?

更新2号(2014年2月1日)

我也尝试过柯蒂斯的建议:

{{ show_performances limit="1" }} 
   {{if "{ g_show_date format='Ymd' }" >= "{ current_date format='Ymd' }"
        AND "{ g_show_time format='Hi'  }" > "{ current_date format='Hi'}"}}  
        <p>{{ g_show_date }} @ {{ g_show_time }}</p>
   {{ endif }}      
{{ /show_performances }}

但是{{ current_date }}条件似乎失败了:因为过去的表演会被退回。

2 个答案:

答案 0 :(得分:1)

我不确定这会解决您的问题,但我认为我在您的代码中发现了一个拼写错误。在你的例子中它说:

if g_show_date|is_future

我得到了更好的结果,将其改为

if g_show_date|in_future

为了让你的代码只显示每个节目的下一个即将发生的事件,我猜你会在下一个节目作为条件循环你的循环。 (不知道现在如何完成那个)

答案 1 :(得分:0)

您可以使用{{ current_date }}和format参数来测试时间是否过去。

您可能需要使用if标记中的花括号数量;标签应该在其他标签中使用单个花括号,但我发现它并不总是那样。我想有人(Gareth,也许?)说他们注意到它是原生的Statamic变量使用单个curlies,而自定义变量使用double。

{{ entries:listing folder="shows" limit="3" }}
  {{ show_time_grid limit="1" }}

    {{ if { g_show_date format="Ymd" } >= { current_date format="Ymd" } AND
          { g_show_time format="Hi"  } >  { current_date format="Hi"  }
    }}  
      {{ g_show_date }}<br/>
      <h2>{{ title }}</h2>
    {{ endif }}

  {{ /show_time_grid }}
{{ /entries:listing }}

时间格式使用前导零,表示月,日和小时。小时是24小时的时间,所以它在前/后中午放映时间内不会出现意外行为。有关详细信息,请参阅the PHP manual