2014-10-03 4 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 со всеми дочерними элементами для FitoCategory по id;

Мне нужен код привязки вместо:

$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; 
} 
Смежные вопросы