【问题标题】:SilverStripe 3 - Options for <% loop %>SilverStripe 3 - <% loop %> 的选项
【发布时间】:2014-01-02 06:46:24
【问题描述】:

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

我不知道选项是否是正确的名称。我是说这些

<% loop Dataobject.Reverse %>
<% loop Dataobject.Limit() %>

谁能告诉我这里可能发生的一切?它的正确名称是什么?

【问题讨论】:

    标签: php loops silverstripe


    【解决方案1】:

    您的问题中有一个错误,它是 &lt;% loop $DataList.xxx %&gt;&lt;% loop $ArrayList.xxx %&gt;(请参阅,您正在循环一个 DataObjects 列表)

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

    所以,例如:

    <% loop $DataList.Reverse %>$Title<% end_loop %>
    

    有点像:

    <?php 
    foreach($dataList->reverse() as $item) { 
        echo $item->Title; 
    }
    

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


    tl;博士; /结论

    loop 根本没有选项
    您所说的选项是您要循环的列表中存在的方法。 您通常会循环的 2 个列表 php 类是:

    查看 API 文档中的方法列表以了解可用的方法。

    显然并非所有方法都用于循环,
    只有那些返回 DataListArrayList 的才会有用。
    您可以看到它们从表格的第一列返回。

    例如:

    public ArrayList limit( integer $length, integer $offset = 0 )
    

    意思是:

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

    所以你可以这样做:&lt;% loop $List.limit(10,5) %&gt;


    进一步阅读:

    该列表中的某些方法不显示参数,但实际上有参数,这是因为它们是动态的,API 文档无法显示。

    示例:

    public ArrayList filter( )
    

    可以这样使用(我想,没试过):

    <% loop $List.filter('Name', 'Zauberfisch') %>
    

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

    【讨论】:

    • 这很有用。谢谢
    • PHP(因此 SilverStripe)在方法名称上不区分大小写:&lt;% loop $List.LIMIT(10,5) %&gt; 也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2013-01-06
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多