我正在尝试为模板中循环内的循环创建一个带有子 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()
- 以对象类型 DataList
返回我的所有“FitoCategory”;
$this->Items($category->ID)
- 返回 DataList
,其中包含 FitoCategory 的所有子条目(按 ID);
我需要一个绑定(bind)代码:
$category->entries = $this->Items($category->ID);
最佳答案
目前,查询运行未缓存,因此每次循环列表时都会创建新的 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;
}
关于loops - SilverStripe 添加到 DataList 子 DataList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26182482/