2015-11-10 35 views
1

我想從數據對象中取出枚舉值以充當菜單/過濾器。我一直無法找到任何關於如何做到這一點的文件,而我的嘗試都失敗了。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,這表明它正在工作,但ca不能訪問模板中的枚舉值標籤。

如何正確返回這些值,以便它們可以在模板中循環播放?

回答

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