SilverStripe添加到DataList子DataList

时间:2014-10-03 15:57:12

标签: loops 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() - 返回我的所有&#39; FitoCategory&#39;在对象类型DataList;

$this->Items($category->ID) - 按ID返回DataList包含FitoCategory的所有子条目;

我需要一个绑定代码:

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

1 个答案:

答案 0 :(得分:6)

目前,查询运行尚未缓存,因此每次循环列表时都会创建新的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;
}