我知道不推荐做法,数据过滤应该在 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>
不尊重这种情况。是否可以保持一些计数器运行,至少能够输出底部的命中数?或者根本没办法(除了自定义视图)?
答案 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中创建一个自己的过滤器。