TYPO3流体:计算过滤的迭代次数

时间:2016-11-08 13:50:57

标签: typo3 fluid extbase

我知道不推荐做法,数据过滤应该在 controller 存储库中完成。但这经常发生在我身上:

您有一个数据列表,并希望根据某些条件显示它(在示例中为plugin.myext.settings.year = 2015):

<f:for each="{events}" as="event">
  <f:if condition="{f:format.date(date: event.date, format: 'Y')}=={settings.year}">
  {event.name}
  </f:if>
</f:for>

这是一种从2015年开始获取所有活动的简单方法。

但是如何统计那些ad-hoc过滤的事件? 输出类似于: 2015年的123个事件

<f:count>{events}</f:count>不尊重这种情况。是否可以保持一些计数器运行,至少能够输出底部的命中数?或者根本没办法(除了自定义视图)?

2 个答案:

答案 0 :(得分:2)

据我所知,自定义viewhelper将是您统计的唯一选择。 你可能有机会使用vhs,https://fluidtypo3.org/viewhelpers/vhs/ vhs:variable.get / set。

<vhs:variable.set('eventCount', 0) />    
<f:for each="{events}" as="event">
      <f:if condition="{f:format.date(date: event.date, format: 'Y')}=={settings.year}">
         <vhs:variable.set('eventCount' ,{variable.get('eventCount')}+1) />
      {event.name}
      </f:if>
    </f:for>
<span>count: <vhs:variable.get('eventCount) />

这可能有用,但我怀疑流体允许添加。

但是如果你可以添加javascript,你可以对列表元素进行计数。

使用jquery的Javascript看起来像:

var eventCount = jQuery('listId .event').length;
var countHtml = jQuery('<div />', {id: 'eventCount', html: "event count:" + eventCount});
jQuery('.tx_extkey').append(countHtml);

答案 1 :(得分:2)

你可以添加一个getter&#34; getYear&#34;你的活动模特。您可以使用GroupedForViewHelper来按年分组事件:

<f:groupedFor each="{events}" as="eventsByYear" groupBy="year" groupKey="year">
  <f:if condition="{year} == {settings.year}">
    <f:then>
       <h3>{eventsByYear -> f:count()} events in {year}</h3>
       <ul>
         <f:for each="{eventsByYear}" as="event">
           <li>{event.name}</li>
         </f:for>
       </ul>
    </f:then>
  </f:if>
</f:groupedFor>

但正如您自己已经注意到的:要过滤事件,请根据您的需要在EventRepository中创建一个自己的过滤器。