2014-10-03 101 views
1

我试图创建一个孩子的DataList DataList控件用于在模板中环内的循环:SilverStripe添加到DataList的孩子DataList控件

public function getAllCategoriesAndEntrys(){ 
    $categories = FitoCategory::get(); 

    foreach ($categories as $category) { 
     $category->entries = $this->Items($category->ID); 
    } 

    return $categories; 
} 

我的模板看起来是这样的:

<% loop getAllCategoriesAndEntrys() %> 
    $ID $Title <br> 
    <% loop entries %> 
     ------ $Title <br> 
    <% end_loop %> 
<% end_loop %> 

在我的示例中,我确信:

FitoCategory::get() - 返回对象类型中所有我的'FitoCategory'DataList ;

$this->Items($category->ID) - 返回DataList与ID为FitoCategory所有子项;

我需要,而不是绑定代码:

$category->entries = $this->Items($category->ID); 

回答

5

目前,查询运行没有缓存,以便新FitoCategory对象被创建每次循环在列表上。这意味着任何其他属性都会丢失。

相反,你要的对象添加到ArrayList并返回来代替。

public function getAllCategoriesAndEntrys(){ 
    $categories = FitoCategory::get(); 
    $list = ArrayList::create(); 

    foreach ($categories as $category) { 
     $category->entries = $this->Items($category->ID); 
     $list->push($category); 
    } 

    return $list; 
}