Создать ответ 
Построение дерева иерархии или дерева комментариев
Автор Сообщение
Incognito Не на форуме
Лейтенант
*

Сообщений: 138
У нас с: Nov 2011
Сообщение: #71
RE: Построение дерева иерархии или дерева комментариев
(07.08.2012 22:44:21)Admin писал(а):  Просто переместите JavaScript ниже формы ответа, а еще лучше в конец файла.

Yahoo Ура!!! Всё работает! Yahoo Спасибо Вам огромное! Yes
07.08.2012 22:55:01
Найти все сообщения Цитировать это сообщение
Winston Не на форуме
Старшина
*

Сообщений: 55
У нас с: Jan 2013
Сообщение: #72
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте! Подскажите какой порядок кода должен быть?

делаю так

PHP код:
$result mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and first_parent=0 ORDER BY id LIMIT ".($number_theme*5-5).",5"$db);
 
$number mysql_num_rows($result);
 
$zapros='';
 for (
$n=1$n<=$number$n++) {
     
$parents[$n]=mysql_fetch_array($result);
     
$zapros.=$parents[$n][id].','.$parents[$n][id].',';
 }
 
$zapros=substr($zapros0, -1);
 
 
$result mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and (id IN(".$zapros.") or first_parent IN(".$zapros."))"$db);
 
$number mysql_num_rows($result);
 
if (
$number>0) {
    while (
$comments=mysql_fetch_assoc($result)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'], $comments['plus'], $comments['minus'], $comments['first_parent']);
 echo 
parents().'</div>';
    echo 
'
<div style="padding:3px;margin-top:10px; border-top:3px solid #09C;">
<p align="center"><strong>Последние комментарии посетителей:</strong></p><br></div>'
;
     function 
parents($parent=0,$left=0) {
 global 
$tags;
    for (
$i=0;$i<=count($tags[$parent])-1;$i++) {
 if (
$tags[$parent][$i][2]=='Administrator'$tags[$parent][$i][2]='<font color="#cc1111">Administrator</font>';
 if (
$tags[$parent][$i][6]==0$tags[$parent][$i][6]=$tags[$parent][$i][0];
      echo 
'<div align="right" style="margin:0px 0px 0px '.$left.'px;">';

 if (
$comments[login]=='Admin'$comments[login]='<font color="#C00">Admin</font>';

 
$result_minus mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment
 WHERE comment_id='"
.$comments[id]."' "$db);
 
$ocenka_com=mysql_fetch_array($result_minus);
//Форма комментов
  
if (isset($tags$tags[$parent][$i][0] ])) parents($tags[$parent][$i][0],20);
     echo 
'</div>';
 }
 }
 } 

Но ничего не выводит. Пробовал по всякому, но так ничего не получилось. Я что то запутался в этих циклах и условиях, что сначало должно быть а что потом?
09.08.2013 10:26:12
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #73
RE: Построение дерева иерархии или дерева комментариев
Ох, давно это было... Scratch

Сначала идет функция parents, а потом остальное.

Короче, как-то так:
PHP код:
function parents($parent=0,$left=0) {
 global 
$tags;

 for (
$i=0;$i<=count($tags[$parent])-1;$i++) {

 
$result_minus mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$tags[$parent][$i][0]."' LIMIT 1");
 
$ocenka_com=mysql_fetch_array($result_minus);

 if (
$tags[$parent][$i][2]=='Incognito'$tags[$parent][$i][2]='<font color="#cc1111">Incognito</font>';
      echo 
'<div align="right" style="margin:0px 0px 0px '.$left.'px;">';

 echo 
'<br><table border="0" width="95%" style="border: 1px solid #4874a3;" bgcolor="#fffabc"><tr>';
 echo 
'<td align="left" style="padding:5px 5px 5px 5px;">';
 echo 
'<div id="m'.$tags[$parent][$i][0].'"></div><b>'.$tags[$parent][$i][2].'</b></td>';
 echo 
'<td width="140">';
 echo 
'<span style="font-size:12px;">('.$tags[$parent][$i][3].')</span></td>';
 echo 
'<td width="20" >';
 echo 
'<form method="POST" action="'.$_SESSION[mess_url].'#m'.$tags[$parent][$i][0].'">';
 echo 
'<input type="hidden" name="comment_id" value="'.$tags[$parent][$i][0].'">';
 echo 
'<input type="hidden" name="ocenka" value="1">';
 echo 
'<input type="image" src="comm_up.gif" title="Хороший комментарий" align="middle">';
 echo 
'</form></td>';
 echo 
'<td width="5"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>';
 echo 
'<td width="20">';
 echo 
'<form method="POST" action="'.$_SESSION[mess_url].'#m'.$tags[$parent][$i][0].'">';
 echo 
'<input type="hidden" name="comment_id" value="'.$tags[$parent][$i][0].'">';
 echo 
'<input type="hidden" name="ocenka" value="0">';
 echo 
'<input type="image" src="comm_down.gif" title="Плохой комментарий" align="middle">';
 echo 
'</form></td></tr></table>';
 echo 
'<table border="0" width="95%" style="border: 1px solid #eeeeee;"bgcolor="#f0fff0">';
echo 
'<tr><td width="100"><img src="'.$ava_user[$tags[$parent][$i][2]].'">';
echo 
'<td>';
if ((
$ocenka_com[0]-$ocenka_com[1])<0)
echo 
'<div><a href="javscript://" class="spoiler_link">Показать / скрыть плохой комментарий</a><div class="spoiler_body">'.wordwrap(nl2br($tags[$parent][$i][1]), 70"\n"1).'</div></div>';
else echo 
wordwrap(nl2br($tags[$parent][$i][1]), 70"\n"1);
 echo 
'</td></tr></table>';
echo 
'<div align="center" style="width:100px; border: 1px solid #000;"><span class="size14" onClick="comm_on(0,'.$tags[$parent][$i][0].','.$tags[$parent][$i][4].')">Ответить</span></div>';
     if (isset(
$tags$tags[$parent][$i][0] ])) parents($tags[$parent][$i][0],20);
     echo 
'</div>';
 }
 }

$result mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and first_parent=0 ORDER BY id"$db);
 
$number mysql_num_rows($result);
 
$zapros='';
 for (
$n=1$n<=$number$n++) {
     
$parents[$n]=mysql_fetch_array($result);
     
$zapros.=$parents[$n][id].','.$parents[$n][id].',';
 }
 
$zapros=substr($zapros0, -1);

 
$result mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and (id IN(".$zapros.") or first_parent IN(".$zapros."))"$db);
 
$number mysql_num_rows($result);

if (
$number>0) {
    while (
$comments=mysql_fetch_assoc($result)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'], $comments['plus'], $comments['minus'], $comments['first_parent']);
 echo 
parents().'</div>';
    echo 
'<div style="padding:3px;margin-top:10px; border-top:3px solid #09C;">
<p align="center"><strong>Последние комментарии посетителей:</strong></p><br></div>'
;

09.08.2013 19:50:29
Найти все сообщения Цитировать это сообщение
Winston Не на форуме
Старшина
*

Сообщений: 55
У нас с: Jan 2013
Сообщение: #74
RE: Построение дерева иерархии или дерева комментариев
Странно, но все равно не получается. Убрал пока оценивание комментов, и все лишнее.

PHP код:
function parents($parent=0,$left=0) {
 global 
$tags;
 for (
$i=0;$i<=count($tags[$parent])-1;$i++) {
 if (
$tags[$parent][$i][3]=='Admin'$tags[$parent][$i][3]='<font color="#cc1111">Admin</font>';
 if (
$tags[$parent][$i][4]==0$tags[$parent][$i][4]=$tags[$parent][$i][0];
 echo 
'<div align="right" style="margin:0px 0px 0px '.$left.'px;">';
 echo 
'<br><div class="com_tab">';
 echo 
'<div id="m'.$tags[$parent][$i][0].'"></div>
 <div class="comment_img"><img src="/../site-img/user.png" width="50" height="50"></div>
 <div class="comment_container">
  <div class="comment_login"> '
.$tags[$parent][$i][3].'</div>
  <div class="comment_date">Дата: '
.$tags[$parent][$i][4].'</div>
<div class="comment_text"><div>'
;
echo 
wordwrap(nl2br($tags[$parent][$i][2]), 70"\n"1);
 echo
'
</div>

 </div>
 </div> 
</div>'
;
 if (isset(
$tags$tags[$parent][$i][0] ])) parents($tags[$parent][$i][0],20);
     echo 
'</div>';
}
}
$result mysql_query("SELECT * FROM `comment` WHERE `theme`='".$_SESSION[full_url]."' and `moderation`='1' and `first_parent`='0' ORDER BY id DESC LIMIT ".($number_theme*5-5).",5"$db);
 
$number mysql_num_rows($result);
 
$zapros='';
 for (
$n=1$n<=$number$n++) {
     
$parents[$n]=mysql_fetch_array($result);
     
$zapros.=$parents[$n][id].','.$parents[$n][id].',';
 }
 
$zapros=substr($zapros0, -1);
 
$result mysql_query("SELECT * FROM `comment` WHERE `theme`='".$_SESSION[full_url]."' and `moderation`='1' and (id IN(".$zapros.") or `first_parent` IN(".$zapros."))"$db);
 
$number mysql_num_rows($result);
if (
$number>0) {    
while (
$comments=mysql_fetch_assoc($result)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'], $comments['first_parent']);
 echo 
parents().'</div>';    
 echo 
'<p align="center"><strong>Последние комментарии посетителей:</strong></p><br></div>';


Поставил full_url вместо mess_url, в бд менял значения first_parent и parent_id

Но все равно, данные только добавляются и не выводятся.
10.08.2013 13:57:58
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #75
RE: Построение дерева иерархии или дерева комментариев
Странно. Удалите тогда из обоих SELECT запросов
Код:
theme='".$_SESSION[mess_url]."' and

Таким образом на экран должны быть выведены все комментарии независимо от тем, к которым они были оставлены.
Это нужно для теста!
10.08.2013 16:54:33
Найти все сообщения Цитировать это сообщение
Winston Не на форуме
Старшина
*

Сообщений: 55
У нас с: Jan 2013
Сообщение: #76
RE: Построение дерева иерархии или дерева комментариев
Так вывод появился.

Только если убрать этот кусок кода

PHP код:
and (id IN(".$zapros.") or `first_parentIN(".$zapros.")) 

С ним данные не выводятся. В чем причина пока не нашел

Ага изменив $number_theme на $comment_list все вывелось...

Так и древовидный список выводится. Правда, пока проверил на нескольких комментах. Единственное, нужно стили CSS еще подогнать. И такой вопрос можно ж при нажатии на кнопку ответить, выдавать форму без js, а сразу под тем комментом, на который хотят ответить?
(Последний раз сообщение было отредактировано 11.08.2013 в 09:07:02, отредактировал пользователь Winston.)
11.08.2013 08:15:15
Найти все сообщения Цитировать это сообщение
Winston Не на форуме
Старшина
*

Сообщений: 55
У нас с: Jan 2013
Сообщение: #77
RE: Построение дерева иерархии или дерева комментариев
А как можно сделать вместо древовидного вывода, цитирование? А то как то не очень та иерархия, она мне и на других сайтах не особо нравилось. Постоянно съезжает влево.

А дизайн то не резиновый. Вот древовидный вид убрал. Можно как то чтоб когда отвечают на комент, вставлялась цитата? Текст коммента на который отвечают.

Либо такого плана "ответ на сообщение Василия" и текст ответа.
11.08.2013 11:52:08
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #78
RE: Построение дерева иерархии или дерева комментариев
Цитата:можно ж при нажатии на кнопку ответить, выдавать форму без js, а сразу под тем комментом, на который хотят ответить?

А как Вы себе это представляете без JS?
Можно конечно сделать под каждым комментарием свою личную форму ответа, которая при клике будет появляться при помощи CSS. Как это реализуется можно посмотреть в теме Спойлер для сайта на CSS, но для комментариев это не оптимальное решение, т.к. вместо одной формы на JS придется делать много на CSS.

Цитата:Можно как то чтоб когда отвечают на комент, вставлялась цитата?

Конечно можно. Ведь когда отвечаем на комментарий, не проблема записывать в базу id этого самого комментария. А при выводе ответа на комментарий достаточно лишь добавить всего один SELECT по id, вывод которого оформить в виде цитаты.
11.08.2013 13:49:39
Найти все сообщения Цитировать это сообщение
Winston Не на форуме
Старшина
*

Сообщений: 55
У нас с: Jan 2013
Сообщение: #79
RE: Построение дерева иерархии или дерева комментариев
Хорошо, надо будет попробовать сделать цитирование. Пока другая проблема, за пол дня так и не решил, оценивание перестало работать

Правильно ж получается если такой массив

PHP код:
($comments=mysql_fetch_assoc($result)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'],$comments['minus'],$comments['plus'], $comments['first_parent']); 

Значит $comments['minus'] = $tags[$parent][$i][4] а $comments['plus'] = $tags[$parent][$i][5]

И передаем эти значения в $_POST

Но оценки не обновляются, и айпи не добавляется в БД.
11.08.2013 14:42:24
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #80
RE: Построение дерева иерархии или дерева комментариев
Для того чтобы понять где ошибка, выводите все значения переменных (которые Вы записываете в базу) на экран, тогда станет ясно, какие из них пустые либо неверные.

Цитата:И передаем эти значения в $_POST

Для чего? Ведь plus=(plus+1) намного удобнее и безопаснее.

На нашем сайте, например, $_POST["ocenka"] содержит 0 для минусов и 1 для плюсов. Таким образом, мы используем всего одну переменную, а не две. И в зависимости от содержимого $_POST["ocenka"] мы обновляем plus=(plus+1) или minus=(minus+1).
11.08.2013 16:26:41
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru