【问题标题】:SilverStripe enum values to menuSilverStripe 枚举值到菜单
【发布时间】:2015-11-10 20:29:52
【问题描述】:

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

例如我有:

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

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

【问题讨论】:

    标签: silverstripe


    【解决方案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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多