【问题标题】:Break from loop in Silverstripe TemplateSilverstripe 模板中的循环中断
【发布时间】:2017-01-07 12:57:30
【问题描述】:

简单地说,是否有可能break 退出模板文件 (.ss) 内的循环

例如。

你有一个 ArrayList,你想循环它直到你找到你需要的键。在这种情况下,我需要追踪MyRequestVar 并在之后立即退出循环。

<% loop $RequestVars %>
    <% if $Key == "MyRequestVar" %>
        MyRequestVar is set to $Value
        <% break_loop %>
    <% end_if %>
<% end_loop %>

当然,我可以让它继续迭代 ArrayList,它会按预期工作,但我的强迫症正在开始考虑 perf++

【问题讨论】:

  • 最好在你的 PHP 代码中这样做。
  • 我不同意你的观点 :)
  • 如果你需要一个修饰符,比如 :GreaterThanFilter
  • 没有打破循环,但比它更好;把它作为答案@munomono 打勾

标签: php templates silverstripe


【解决方案1】:

在您提供的上下文中无法中断循环

但是,您可以像这样从模板中过滤 ArrayList:

<% loop $RequestVars.filter(Key, "MyRequestVar") %>

你也可以使用SearchFilter Modifiers

【讨论】:

  • 请注意:由于您可以在模板和 $list("Page") 中使用过滤器/排序/限制来获取 DataObjects,因此您很少需要编写 php-getter。可能有人说这是不好的做法,但我喜欢它:)
  • 嗯,$LatestNews$List('News').sort(...).limit(5) 更具声明性,但这主要是一个偏好问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多