![]() |
0 Всего найдено: 11
Vogo
Сообщение
28/01/2010 11:30
Копия темы
Как вывести комментарии лесенкой? Например как на фрилансе. Предположим, имеется: id | comment_id. если comment_id = 0 значит комментарий самого верхнего уровня. $comments = $db->getComments(); function showComments($comments) { foreach (..... }
romalkavian
Сообщение
28/01/2010 11:44
Копия темы
стройте дерево, ну а вывод уж зависит от верстки о_О визуал с программингом мало связан или вы как раз хотите узнать что такое дерево и с чем его едят?))
Faat
Сообщение
28/01/2010 11:54
Копия темы
Постройте дерево. Потом выводите рекурсивно подкомментарии для каждого комментария. Верхний уровень = подкомментарии для корня. Отступ можно делать margin-left-ом. Но не забудьте сделать ограничение, чтобы при большой вложенности вёрстка не расползалась.
Faat
Сообщение
28/01/2010 12:06
Копия темы
id, comment_id id = ид комментария, comment_id = ид предка. Сначала выводим всех с comment_id = 0 и для каждого вызываем вывод подкомментариев с comment_id = [id текущего комментария]. Само дерево. $comments[$comment_id][$id] = $text; Например, так.
Vogo
Сообщение
28/01/2010 12:08
Копия темы
Вот что придумал foreach ($comments as $comment) { if ($comment['comment_id'] > 0 && isset($comments[$comment['comment_id']])) { $comments[$comment['comment_id']]['children'][$comment['id']] = $comments[$comment['id']]; $comments[$comment['id']] = & $comments[$comment['comment_id']]['children'][$comment['id']]; } } Теперь надо удалить все элементы массива "первый уровень" которые уже прицеплены к другим, а это те у которых id родителя > 0 foreach ($сomments as $key=>$сomment) { if ($сomment['comment_id'] > 0) { unset($comments[$key]); открепляем ссылку unset($comments[$key]); -удаляем элемент } }
Vogo
Сообщение
28/01/2010 12:09
Копия темы
циклов много... но вариант. Впринципи, комментариев не будет очень много, думаю.
Faat
Сообщение
28/01/2010 12:15
Копия темы
Много? function vivod($pid) { ___foreach($comments[$pid] as $val) ______foreach($val as $k=>$v) ______{ _________//вывод комментария _________vivod($k); ______} } + формирование массива с комментариями.
RiDDi
Сообщение
28/01/2010 15:11
Копия темы
А чего низя рекурсией? public static function comment($хтмл, $объект, $уровень_вложенности=0 ) { __выводим текущий коммент; __if($объект->parent) html::comment($хтмл, $объект, $уровень_вложенности + 1); }
Vogo
Сообщение
28/01/2010 15:20
Копия темы
0
сделали рекурсией... после приготовлений массива что выше, идет рекурсия function show($rows) { foreach ($rows as $row) { echo $row['text']; if (isset($row['children'])) { show($row['children']); } } } |
Выразить восторг, поругаться или предложить что-нибудь можно на форуме |
Для обсуждения этого сервиса так же есть темы на фрилансе по поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал" |