1. Сначала ваша модель должна использовать поведение «Дерево» в файле модели (Modelname.php - в моем случае Post. PHP)
public $actsAs = array('Tree');
2.Next вам нужно получить резьбовые результаты и передать их в представление (ModelnamesController.php - в моем случае PostsController.php).
$posts = $this->Post->find('threaded');
$this->set('posts', $posts);
3.Finally, вот шаблон, который можно использовать, что делает бесконечно резьбовой список для приведенных выше результатов
<div id="posts_navi">
<? function renderPosts($postsArray, $tmpModel){
//set return for the first time
if(!isset($return)){ $return = ""; }
$return .= '<ul>';
//create list
foreach ($postsArray as $post){
$return .= '<li>';
if($post['Post']['content'] != null){
$return .= $tmpModel->link($post['Post']['title'], array('action' => 'view', $post['Post']['id']),array('escape'=>false));
}else{
$return .= $post['Post']['title'];
}
//if post has children, go deeper
if(!empty($post['children'])){
$return .= renderPosts($post['children'], $tmpModel);
}
$return .= '</li>';
}
$return .= '</ul>';
return $return;
} ?>
<? $tmpModel = $this->Html; // we have to pass html helper inside, I am not sure it this is best way but it works
echo renderPosts($posts, $tmpModel); //finally, we render the $result returned. ?>
</div>
Я знаю это, и я, но дерево Поведение на неограниченное количество уровней, но , Я хочу создать самое простейшее дерево, только с двумя уровнями (родителями и дочерними). Поведение дерева в этот момент будет «слишком большим» :) Я знаю, что есть в CakePHP find ('threaded'), но я не могу этого понять ... – kicaj
Похоже, что вы можете после этого: http://book.cakephp.org/view/812/find-threaded. Я не знаю деталей, но он, похоже, использует гибрид моделей вложенных наборов и смежности. –