我试图从数据对象中提取枚举值以充当菜单/过滤器。我无法找到有关如何执行此操作的任何文档,我的尝试都失败了。
例如我有:
class Specification extends DataObject {
private static $db = array (
'Standard' => 'Enum("BS 1400,AS 1565")'
);
}
我尝试做类似的事情:
public function Standards() {
$stnds = Specification::get()->dbObject('Standard')->enumValues();
$list = ArrayList::create();
foreach ($stnds as $stnd) {
$list->push($stnd);
}
return $list;
}
我希望能够在模板中循环结果值,但无法访问标签 - 如果我这样做:
<% loop Standards %>
$Pos
<% end_loop %>
这给了我1 2
,表明它正在运行,但无法访问模板中的枚举值标签。
如何正确返回这些值,以便它们可以在模板中循环?
答案 0 :(得分:1)
当您将项目推送到ArrayList对象时,它们只是存储在php数组中。 SS模板解析器不处理php数组,因此您的问题的一个解决方案是在推送之前将项目包装在ArrayData中,如下所示:
public function Standards(){
$stnds = Specification::get()->dbObject('Standard')->enumValues();
$list = ArrayList::create();
foreach ($stnds as $stnd) {
$list->push(new ArrayData(array('Standard' => $stnd)));
}
return $list;
}
然后,在您的模板中:
<% loop Standards %>
<h1>$Pos $Standard</h1>
<% end_loop %>