如何在循环中获得倒数第二个项目

时间:2016-05-27 14:38:51

标签: silverstripe

Silverstripe有助手获取循环中的第一个和最后一个项目以及循环中当前项目的位置/计数。

虽然我无法找到当它是倒数第二个项目时如何捕捉......

我尝试过琐碎的事情(通常适用于大多数语言),例如

<!-- Right now I know the total is 11, so result should be 10 -->
<!-- Total value will always vary so needs to be dynamically worked out -->

<% if $Pos == $TotalItems-1 %>
    $Pos
<% end_if %>

     &&

<% if $Last-1 %>
    $Pos
<% end_if %>

这不起作用,AFAIK与JavaScript或PHP不同,或者你可以做任何事情来获得-1来获得循环/数组中倒数第二个项目。

我需要做些什么来完成这项工作?

2 个答案:

答案 0 :(得分:5)

您可以使用$FromEnd。它将返回到列表末尾的距离。默认情况下,此操作以1开头,与$Pos的方式相同。所以列表中的最后一项是$FromEnd == 1。列表中的第二个最后一项是$FromEnd == 2

您也可以将起始索引作为参数传递给函数,因此这也会选择第二个最后一项:$FromEnd(0) == 1

在您的模板中,这将如下所示:

<% if $FromEnd(0) == 1 %>
<%-- conditional stuff for the second-last item --%>
<% end_if %>

<% if $FromEnd(0) < 2 %>
<%-- conditional stuff for the two last items in a list --%>
<% end_if %>

一般来说,我几乎从不使用这些方法。如果它与正确格式化项目有关,我建议改用CSS(例如。nth-childnth-last-of-type等)。

答案 1 :(得分:0)

TNKS!它也对我有用......

<% if $FromEnd(0) != 0 %>
    <%-- conditional stuff for all items but the last one in a list --%>
<% end_if %>