2016-11-08 45 views
1

我知道这不是建议的做法,数据过滤应该在 控制器 存储库中完成。但是,这发生在我身上经常:TYPO3流体:计数过滤迭代

你有数据的列表,想要显示它对于一些标准(在本例中,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.

但如何计算这些特设过滤事件? 输出如下内容:123 2015年的活动

<f:count>{events}</f:count>将不尊重条件。是否有可能让一些计数器继续运行,至少能够输出底部的命中数?或者根本没有办法(除了自定义viewhelper)?

+1

我认为你应该考虑花费精力在存储库中过滤critera,而不是在视图中。 SCNR。 – j4k3

回答

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,你可以做一个列表元素的计数。

的Javascript使用jQuery看起来是这样的:

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

听起来不错!我会试试看! – Urs

+2

直到7.6你不能直接计算流体。你需要一个额外的VH来做数学。但最干净的解决方案(每个人都会期待它,运行时和内存消耗最少)是在存储库中进行过滤和计数。 –

+0

只是为了完成这个(而存储库是正确的方式):我将如何写''使用'v :math.sum'?像''vhs:variable.set('eventCount',{v:math.sum({variable.get('eventCount')},1)} />'''''''''''''''' - 您可以用这种方式嵌套VH吗? – Urs

2

您可将吸气剂“得到年”添加到您的事件模型。比你可以使用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做出自己的过滤器。

+0

出于好奇:在模型中,吸气剂是否会插入现有的“日期”字段并将年份从中拉出,这就是您的意思,对吗?没有向db添加“年份”列 – Urs

+1

对,年度获得者只能从日期字段获得年份而不需要额外的列。 –

+0

谢谢!这是一个有趣的可能性。 – Urs