Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="AriaL"]Доброе время суток. На сайте планируется сделать Вопросы и Комментарии к ним (по сути, некая аналогия с ЖЖ, только Вопросы вместо Постов). У Вопроса и Комментов есть свои Авторы. Надо вывести Вопрос и Комменты к нему в виде дерева. Соответственно при выводе нужно еще указать Авторов. Ассоциации моделей: [code]class Question extends AppModel { var $belongsTo = array( 'User' => array('className' => 'User', 'foreignKey' => 'user_id', 'conditions' => '', 'fields' => array('User.id', 'User.nickname') )); var $hasMany = array( 'Comments' => array('className' => 'Comment', 'foreignKey' => 'question_id', 'dependent' => false) ); } class Comment extends AppModel { var $belongsTo = array( 'User' => array('className' => 'User', 'foreignKey' => 'user_id', 'fields' => 'User.nickname', )); var $hasMany = array( 'ChildComment' => array('className' => 'Comment', 'foreignKey' => 'parent_id', 'dependent' => false, )); }[/code] Я сделал в модели Question метод, который должен возвращать по указанному questionId Вопрос и массив Комментариев к нему: [code]$this->contain(array('Comments'=>array('ChildComment', 'conditions'=>array('Comments.parent_id' => null)),'User')); $res = $this->read(null, $questionId);[/code]Возвращаются данные в следующем формате: [code]array 'Question' => array (массив полей Вопроса) 'User' => array (массив полей Автора Вопроса) 'Comments' => array 0 => array (массив полей Комментария) 1 => array ...[/code]Но мне, во-первых, нужно получить Автора для каждого Комментария, во-вторых, не возвращаются комментарии второго и далее уровней, а в-третьих, я до конца не могу понять, как мне впотом вывести Комментарии именно в виде древовидной структуры - по идее нужна рекурсивная функция, которая при выводе элемента будет его проверять на предмет наличия у него подмассивов и переходить к ним. Но как в ctp-файле организовать ее, пока непонятно.[/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
michas
Добавлено: 02 Апр 2009 21:25:37
Заголовок сообщения:
почитай про TreeBehavior
http://book.cakephp.org/view/91/Tree
AriaL
Добавлено: 02 Апр 2009 07:20:56
Заголовок сообщения: Чтение и вывод многоуровневых комментариев - как?
Доброе время суток.
На сайте планируется сделать Вопросы и Комментарии к ним (по сути, некая аналогия с ЖЖ, только Вопросы вместо Постов). У Вопроса и Комментов есть свои Авторы. Надо вывести Вопрос и Комменты к нему в виде дерева. Соответственно при выводе нужно еще указать Авторов.
Ассоциации моделей:
Код:
class Question extends AppModel {
var $belongsTo = array(
'User' => array('className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => array('User.id', 'User.nickname')
));
var $hasMany = array(
'Comments' => array('className' => 'Comment',
'foreignKey' => 'question_id',
'dependent' => false)
);
}
class Comment extends AppModel {
var $belongsTo = array(
'User' => array('className' => 'User',
'foreignKey' => 'user_id',
'fields' => 'User.nickname',
));
var $hasMany = array(
'ChildComment' => array('className' => 'Comment',
'foreignKey' => 'parent_id',
'dependent' => false,
));
}
Я сделал в модели Question метод, который должен возвращать по указанному questionId Вопрос и массив Комментариев к нему:
Код:
$this->contain(array('Comments'=>array('ChildComment', 'conditions'=>array('Comments.parent_id' => null)),'User'));
$res = $this->read(null, $questionId);
Возвращаются данные в следующем формате:
Код:
array
'Question' =>
array (массив полей Вопроса)
'User' =>
array (массив полей Автора Вопроса)
'Comments' =>
array
0 =>
array (массив полей Комментария)
1 =>
array ...
Но мне, во-первых, нужно получить Автора для каждого Комментария, во-вторых, не возвращаются комментарии второго и далее уровней, а в-третьих, я до конца не могу понять, как мне впотом вывести Комментарии именно в виде древовидной структуры - по идее нужна рекурсивная функция, которая при выводе элемента будет его проверять на предмет наличия у него подмассивов и переходить к ним. Но как в ctp-файле организовать ее, пока непонятно.
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».