Поисковая форма:) поиск по free-lance.ru Топ/история/обновления фриланса, по разным параметрам (темы, сообщения, пользователи...) Автоматическое удаление постов от ненужных юзеров в топике (php скрипт) Досье(точный ник)
 

Ник (или часть ника):
?
Какой текст ищем:
?
Раздел блогов:
За срок
дней
Тип поиска: (по вхождению: по тексту гуг выдаст посты с "гуг", "гугл", "огугл"; "полнотекстовый": по тексту "гуг" выдаст посты только с "гуг")
По вхождению строки:  Полнотекстовый: 
(поиск не 100% актуальный, есть определённая задержка при обновлении данных для поиска. )
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 Копия темы
стройте дерево, ну а вывод уж зависит от верстки о_О визуал с программингом мало связан

или вы как раз хотите узнать что такое дерево и с чем его едят?))
Vogo Сообщение 28/01/2010 11:53 Копия темы
А как построить дерево? :) (нестед сетс не хотелось бы)
Faat Сообщение 28/01/2010 11:54 Копия темы
Постройте дерево.
Потом выводите рекурсивно подкомментарии для каждого комментария. Верхний уровень = подкомментарии для корня.
Отступ можно делать margin-left-ом. Но не забудьте сделать ограничение, чтобы при большой вложенности вёрстка не расползалась.
Vogo Сообщение 28/01/2010 11:58 Копия темы
Спасибо, а как бы вы построили дерево для такой задачи?
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 Копия темы
сделали рекурсией...
после приготовлений массива – что выше, идет рекурсия

function show($rows)
{

foreach ($rows as $row)
{
echo $row['text'];
if (isset($row['children']))
{
show($row['children']);
}

}

}
0

©2008 edogs egods
Выразить восторг, поругаться
или предложить что-нибудь можно на форуме
Для обсуждения этого сервиса так же есть темы на фрилансе по
поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал"