SilverStripe 3 - <%loop%>的选项

inv*_*tus 4 php loops silverstripe

是否有我可以添加到循环中的所有选项的列表?

我不知道选项是否正确.我是说这些

<% loop Dataobject.Reverse %>
<% loop Dataobject.Limit() %>
Run Code Online (Sandbox Code Playgroud)

有人能告诉我一切可能吗?它的正确名称是什么?

Zau*_*sch 9

您的问题中存在错误,它是<% loop $DataList.xxx %><% loop $ArrayList.xxx %>(请参阅,您正在循环DataObjects列表)

好吧,loop基本上只是一个foreach循环

所以,例如:

<% loop $DataList.Reverse %>$Title<% end_loop %>
Run Code Online (Sandbox Code Playgroud)

有点像:

<?php 
foreach($dataList->reverse() as $item) { 
    echo $item->Title; 
}
Run Code Online (Sandbox Code Playgroud)

'kindof'相同,因为实际上模板会为你做一些检查和转换(例如,如果没有设置Title,它不会抛出并出错),并且循环只能循环SilverStripe列表,而不是数组


TL;博士;/结论

loop
您所说的所有选项都没有选项是您要循环的列表中存在的方法.2列出了你通常会循环的php类:

请参阅API文档中的方法列表,了解可用的方法.

显然并非所有方法都用于循环,
只有那些返回DataListArrayList将有用的方法.
你可以看到他们从表格的第一列返回的内容.

例如:

public ArrayList limit( integer $length, integer $offset = 0 )
Run Code Online (Sandbox Code Playgroud)

手段:

  • 它是公共的(因此它的可访问,私有或受保护的将不会在模板中提供)
  • 它返回ArrayList
  • 名字是 limit
  • 参数是数字长度和数字偏移量

所以你可以这样做: <% loop $List.limit(10,5) %>


进一步阅读:

该列表中的某些方法不显示参数但实际上确实存在参数,这是因为它们是动态的,并且API文档无法显示.

例:

public ArrayList filter( )
Run Code Online (Sandbox Code Playgroud)

可以像这样使用(我想,从未尝试过):

<% loop $List.filter('Name', 'Zauberfisch') %>
Run Code Online (Sandbox Code Playgroud)

您还可以通过创建Extension并将此扩展添加到DataList和来添加自己的方法ArrayList