2016-11-08 44 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