微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何手动获取已使用过滤器将数据格式化为日期的 JSON 数组中的第一个元素项?

如何解决如何手动获取已使用过滤器将数据格式化为日期的 JSON 数组中的第一个元素项?

我试图只检索数组中的第一个实例,该数组在给定的现实世界事件(例如定期举行的每周会议)的不同键内包含多个时隙。

这是当前 twig 代码的外观,生成每个时间段的列表:

 {% for event in data %}
  <img src="{{event.image}}">
   <h1>{{event.title}}</h1>
    <p>{% for t in event.timeslots %}{{t.start_date | date("D,M j @ g:i a") }} - 
{{t.end_date | date("D,M j @ g:i a") }}<br>
       {% endfor %}
      <a href="https://www.example.com/{{event.id}}"
target="_blank">See Details</a></p>
    <hr>
 {% endfor %}

看起来是这样的:

screenshot of multiple timeslots being displayed as found in the original twig code

但鉴于时间戳是 unix 格式,我已经添加一个 | date () 过滤器,所以我假设添加一个 | first 过滤器应该可以过滤掉所有日期,而不是第一个日期数组,正如我在这里尝试的那样:

    {{t.start_date | date("D,M j @ g:i a") | first }}

显示的结果内容一个日期的第一个字母,重复完整的 event.timeslots.start_date 元素实例数计数。

长话短说,其中一些事件包含太多时间段,在设计用例中没有实际意义,因此我基本上只想将其缩短到第一个实例的开始日期,然后显示一个文本说“+ ## more”

以下是我想要完成的成功场景示例:

screenshot of ideal output displaying only the first element of an array

解决方法

将其移至答案,因为它已通过评论解决:

看起来我需要从数组 {{event.timeslots.0.start_date | date("D,M j @ g:i a") }} 中手动获取零键,因为使用 | first 只是为数组中存在的每个键重复第一个字符串。

此外,我还能够弄清楚如何在第一个日期之后显示动态文本,将其他日期作为计数通知,并在语法上格式化单词“time/s”的复数/单数形式。见下文:

{% for event in data %}
 <img src="{{event.image}}">
  <h1>{{event.title}}</h1>
   <p><strong>{{event.timeslots.0.start_date | date("D,M j @ g:ia") }}
{% if event.timeslots | length > 0 %} + {{event.timeslots | length}} 
more time{% if event.timeslots | length > 1 %}s{% endif %}{% endif %}</strong></p>
   <p><a href="https://www.example.com/{{event.id}}" target="_blank">
See Details</a></p>
  <hr>
 {% endfor %}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。