【问题标题】:How to get second to last item in loop如何在循环中获取倒数第二个项目
【发布时间】:2016-09-25 22:58:33
【问题描述】:

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 来获得循环/数组中倒数第二个项目的东西。

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

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    您可以为此使用$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 等)。

    【讨论】:

    • 邪恶!请问您是从哪里得知这件事的?从未在文档中看到它。关于最后一点 - 我也尽可能地 CSS 一切,但我使用它在单个循环中创建多个容器并在它们之间传播数据;所以这不是 CSS 的理想选择,因为我正在使用模板的实际结构,而不是它的样式。
    • @Freemium 啊,我明白了。我看过SSViewer_BasicIteratorSupport 的API。更复杂的方法是添加您自己的TemplateIteratorProvider
    • 对于后面提到的@bummzack,另请参阅stackoverflow.com/questions/14096216/…
    【解决方案2】:

    Tnks!它也对我有用...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多