SilverStripe枚举值为菜单

时间:2015-11-10 20:29:52

标签: silverstripe

我试图从数据对象中提取枚举值以充当菜单/过滤器。我无法找到有关如何执行此操作的任何文档,我的尝试都失败了。

例如我有:

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,表明它正在运行,但无法访问模板中的枚举值标签。

如何正确返回这些值,以便它们可以在模板中循环?

1 个答案:

答案 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 %>