Древовидные комментарии с бесконечной вложенностью

123
bukachuk
На сайте с 07.09.2008
Offline
97
#11
Sanu0074:
Этот запрос!

---------- Добавлено 04.11.2013 в 17:33 ----------

как php определит уровень вложенности и как этот уровень запишется при добавлении коммента!

Если отвечаем на 1 уровень, то следующий будет 2 итд. Самый первый комммент 0 уровня. При комменете берем уровень родительского комментария и прибавляем.

Программирование PHP,Mysql (/ru/forum/934470)
Sanu0074
На сайте с 31.08.2012
Offline
110
#12

bukachuk, попробую, спасибо :)

R
На сайте с 18.12.2009
Offline
92
#13

Но обход нужен рекурсивный, думаю. Вытаскивает ТС сначала родителя. В цикле вытаскивает дочерний элемент и все. Дерева не получается никак и не получится.

ТС - погуглите "рекурсия php". Там все просто.

дани мапов
На сайте с 06.09.2012
Offline
204
#14

http://habrahabr.ru/qa/7550/ - смотрите самый верхний комментарий.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#15
дани мапов:
http://habrahabr.ru/qa/7550/ - смотрите самый верхний комментарий.

Название темы прочитайте и самый верхний комментарий сами.

Там написано:

6) PROFIT дерево комментов с макс. уровнем вложенности равным двум

Это и ребёнок может с 2-мя уровнями :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Sanu0074
На сайте с 31.08.2012
Offline
110
#16

Сделал, но не работает, косяк где-то:

$str = "<ul>";


$pcm=array();

for($i=0;$i<count($comments);$i++){
if(!empty($comments[$i]["parent_id"])){
$pcm[$comments[$i]["parent_id"]]=$comments[$i];
}
}

function buildTree($pid){
if(isset($pcm[$pid])){
$tree = '<ul>';
$tree .= '<li style="background:green">'.$pcm[$pid]['text'];
if(!empty($pcm[$pid]["parent_id"])){$tree.=buildTree($pcm[$pid]["parent_id"]);}
$tree .= '</li>';
$tree .= '</ul>';
}
else {return NULL;}
return $tree;
}

for($i=0;$i<count($comments);$i++){
$str.="<li style='background:red'>".$comments[$i]["text"]."</li>";
if(!empty($comments[$i]["parent_id"])){
$str.=buildTree($comments[$i]["parent_id"]);
}
}

echo "</ul>".$str;
bukachuk
На сайте с 07.09.2008
Offline
97
#17

в фукнциях pcm надо global $pcm; точнее в buildTree, ну это так одна из ошибок;)

А вообще в реале надо сначала получить массив данных а потом вывести его в шаблоне типа так

<ul>
<? foreach($comments as $iter): ?>
<li class="level-<?=$iter['level']?>><?=$iter['comment_text']?></li>
<? endforeach ?>
</u>

Так будет красивше:)

Sanu0074
На сайте с 31.08.2012
Offline
110
#18

bukachuk,

не, надо без global, я передал их в ф-ю, но все-равно не так как надо работает:

$str = "<ul>";


$pcm=array();

for($i=0;$i<count($comments);$i++){
if(!empty($comments[$i]["parent_id"])){
$pcm[$comments[$i]["parent_id"]]=$comments[$i];
}
}

function buildTree($pid,$pcm){

if(isset($pcm[$pid])){
$tree = '<ul>';
$tree .= '<li style="background:green">'.$pcm[$pid]['text'];
if(!empty($pcm[$pid]["parent_id"]) && $pcm[$pid]["parent_id"]!=$pid){$tree.=buildTree($pcm[$pid]["parent_id"]);}
$tree .= '</li>';
$tree .= '</ul>';
}
else {return NULL;}
return $tree;
}

for($i=0;$i<count($comments);$i++){
$str.="<li style='background:red'>".$comments[$i]["text"]."</li>";
if(!empty($comments[$i]["parent_id"])){
$str.=buildTree($comments[$i]["parent_id"],$pcm);
}
}

echo "</ul>".$str;
bukachuk
На сайте с 07.09.2008
Offline
97
#19

for($i=0;$i<count($comments);$i++){
if(!$comments[$i]["parent_id"])) $str.="<li style='background:red'>".$comments[$i]["text"]."</li>";
else {
$str.=buildTree($comments[$i]["parent_id"],$pcm);
}
}
Sanu0074
На сайте с 31.08.2012
Offline
110
#20
bukachuk:
for($i=0;$i<count($comments);$i++){

if(!$comments[$i]["parent_id"])) $str.="<li style='background:red'>".$comments[$i]["text"]."</li>";
else {
$str.=buildTree($comments[$i]["parent_id"],$pcm);
}
}

ничего не вывелось

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий