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

Fre*_*ium 5 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 %>
Run Code Online (Sandbox Code Playgroud)

这不起作用,AFAIK不同于JavaScript或PHP或者你不能打一个-1来获得循环/数组中倒数第二个项目.

我需要做些什么才能做到这一点?

bum*_*ack 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 %>
Run Code Online (Sandbox Code Playgroud)

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