Silverstripe - 在模板中的非关联数组上循环

问题描述 投票:0回答:3

如何在模板内完成此操作?我已经使用 ArrayData 使用模板循环中的键来访问模板中的值,但是如果我有一个没有键的任意字符串数组,我应该使用什么变量来访问这些值?

如果我的控制器中有这个:

public function ArrayList()
{
    $ArrayList = new ArrayList(array('this', 'is', 'a', 'test'));
    return $ArrayList;
}

我的模板中是这样的:

<% loop $ArrayList %>1<% end_loop %>

我该用什么来代替 1 才能让模板输出“这是一个测试”?

php silverstripe
3个回答
17
投票

据我所知这是不可能的,您需要将每个项目包装到 ArrayData 对象中

public function ArrayList()
{
    $ArrayList = ArrayList::create(array(
        ArrayData::create(array('Text' => 'this')),
        ArrayData::create(array('Text' => 'is')),
        ArrayData::create(array('Text' => 'a')),
        ArrayData::create(array('Text' => 'test')),
    ));
    return $ArrayList;
}

和模板:

<% loop $ArrayList %>$Text<% end_loop %>

// 注意:

___::create()
是类固醇的
new ___()


6
投票

您可以只使用

ArrayData
,而不是每次都创建一个新的
$Me
实例。所以你会:

public function ArrayList()
{
    $ArrayList = new ArrayList(array('this', 'is', 'a', 'test'));
    return $ArrayList;
}

并且,在您的模板中:

<% loop $ArrayList %>$Me<% end_loop %>

$Me
指循环中的当前项目。在本例中,它将是数组中的字符串。


0
投票

正如 @zauberfisch 所说,这通常适用于应用程序级代码,这就是我正在使用的。我似乎经常出现在这个SO条目上,所以如果没有别的,就供我参考吧!

public function States(){      
    $ArrayList = ArrayList::create([
        ['Text' => "NSW"],
        ['Text' => "Qld"],
        ['Text' => "Vic"],
        ['Text' => "WA"],
        ['Text' => "SA"],
        ['Text' => "Tas"],
        ['Text' => "ACT"],
        ['Text' => "Distance"]       
    ]);           
    return $ArrayList;               
}    
© www.soinside.com 2019 - 2024. All rights reserved.