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

Сообщений: 352
У нас с: Nov 2014
Сообщение: #301
RE: Построение дерева иерархии или дерева комментариев
Доброе время уважаемый администратор,

Решил не эксперементировать и внедрить на сайт 1 ваш код из сообщения:
http://usefulscript.ru/forum/showthread....63#pid2963

Код:
<?php
function parents($up=0, $left=0) {
global $tag,$mess_url,$this_comm,$level,$mass;

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

if ($tag[$up][$i][2]=='Админ') $tag[$up][$i][2]='<font color="#c00">Админ</font>';
if ($tag[$up][$i][6]==0) $tag[$up][$i][6]=$tag[$up][$i][0];

$sum=$tag[$up][$i][4]-$tag[$up][$i][5];

if ($up!=0 and count($tag[$up])-1!=$i) $mass[$level]=1;
else $mass[$level]=0;

if ($this_comm==2) {
for ($k=0; $k<$level; $k++) echo '</div>';
echo '<div class="sp_comm_links">Показать комментарии</div><div class="sp_comm_body"><div>';
for ($k=1; $k<$level; $k++) {
if ($mass[$k]==1) echo '<div style="border-left:2px solid #000;padding:5px 0 0 '.($left-2).'px;">';
else echo '<div style="padding:5px 0 0 '.$left.'px;">';
}
}
if (isset($tag[ $tag[$up][$i][0] ])) $level++;
$this_comm++;

if ($up==0) echo '<div style="padding:5px 10px 0;">';
else {
if (count($tag[$up])-1!=$i)
echo '<div class="arrow" style="padding:5px 0 0 '.($left-2).'px;">';
else echo '<div class="arrow_2" style="padding:5px 0 0 '.$left.'px;">';
}
echo '<div class="comm_head" id="m'.$tag[$up][$i][0].'">';
echo '<div style="float:left;"><b>'.$tag[$up][$i][2].'</b></div>';

echo '<div class="comm_minus" title="Плохой комментарий"></div>';
echo '<div style="float:right; width:30px; margin-top: 1px; cursor: default;" id="rating_comm'.$tag[$up][$i][0].'">';
echo '<b>'.$sum.'</b></div><div class="comm_plus" title="Хороший комментарий"></div>';
echo '<a style="float:right; width:60px; color:#525252;" href="'.$mess_url.'#m';
echo $tag[$up][$i][0].'"># '.$tag[$up][$i][0].'</a>';
echo '<div style="float:right; width:140px; white-space:pre;">';
echo '('.date("H:i:s d.m.Y", $tag[$up][$i][3]).' г.)</div>';
echo '<div style="clear:both;"></div></div>';
echo '<div class="comm_body">';

if ($sum<0) echo '<u class="sp_link">Показать</u><div class="comm_text">';
else echo '<div style="word-wrap:break-word;">';
echo str_replace("<br />","<br>",nl2br($tag[$up][$i][1])).'</div>';

echo '<div class="open_hint" title="Ответить на сообщение" onClick="comm_on('.$tag[$up][$i][0].',
'.$tag[$up][$i][6].')">Ответить</div><div style="clear:both;"></div></div>';

if (isset($tag[ $tag[$up][$i][0] ])) parents($tag[$up][$i][0],20);
echo '</div>';
}
$level--;
unset($mass);

}
//вывод IP адреса непосредственно с комментариями на сайте
$res=mysqli_query($db,"SELECT * FROM comment WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id");
$number=mysqli_num_rows($res);

if ($number>0) {
echo '<div style="background:#fffdff; border: 1px solid #e1e1e1; border-radius: 15px; box-shadow: inset 0 0 5px #e1e1e1; color: #525252; margin: 10px auto; padding:10px 10px 10px; text-align:center; width:740px;">';
echo '<b id="comments">Последние комментарии посетителей</b><br>'; // function col_pages_#comments
while ($com=mysqli_fetch_assoc($res))
$tag[(int)$com["parent_id"]][] = array((int)$com["id"], $com["message"], $com["login"], $com["date"], $com["plus"], $com["minus"], $com["first_parent"]);
$this_comm=0;$level=0;$c_div=0;
echo parents().'</div><br>';
if ($number>2) echo '</div></div>';
}
?>

т.е. ссылка "Показать (Свернуть) комментарии" находится в 1 месте и скрипт работает нормально, но если не добавляю древовидное комментарий к видимым 2 комментариям на странице.
Добавленный комментарий добавляется и отображается, но со смещением и не совсем правильно в плане оформления.

1. [Изображение: tid_135_comm_6.png]

На 1 скрине все нормально 2 комментария и ссылка "Показать комментарии"

2. [Изображение: tid_135_comm_7.png]

На 2 скрине видно, что когда Ольга добавляет древовидный комментарий для qwr, то комментарий добавляется со смещением, я думаю около 10px и указатель (стрелка) начинается не там, где надо.

Если пользователь цввц добавляет комментарий для Ольга, то тут все нормально, но смещение присутствует.

Как поправить может быть знаете, а то все вроде работает, но коряво отображается.

Заранее благодарен.
09.06.2015 00:32:18
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #302
RE: Построение дерева иерархии или дерева комментариев
Просто нужно добавить такой же горизонтальный отступ в первый блок DIV как в строчке:
PHP код:
if ($up==0) echo '<div style="padding:5px 10px 0;">'

Строчку:
PHP код:
echo '<div class="sp_comm_links">Показать комментарии</div><div class="sp_comm_body"><div>'

Замените на:
PHP код:
echo '<div class="sp_comm_links">Показать комментарии</div><div class="sp_comm_body"><div style="padding:0 10px 0;">'
09.06.2015 22:52:04
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #303
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте, работает Ok, спасибо.

У меня к вам просьба, ранее я неправильно изъяснялся насчет работы скрипта.

Весь код не выкладываю, а только его участки из основного кода :

//Еще комментарии
Код:
if ($up!=0 and count($tag[$up])-1!=$i) $mass[$level]=1;
else $mass[$level]=0;

if ($this_comm==2) {
    for ($k=0; $k<$level; $k++) echo '</div>';
    echo '<div class="sp_comm_body"><div style="padding:0 10px 0;">';
    for ($k=1; $k<$level; $k++) {
        if ($mass[$k]==1) echo '<div style="border-left:2px solid #000;padding:0px 0 0 '.($left-2).'px;">';
        else echo '<div style="padding:0px 0 0 '.$left.'px;">';
    }
}
if (isset($tag[ $tag[$up][$i][0] ])) $level++;
$this_comm++;

Код:
echo '</div>';
}
$level--;
unset($mass);
}


Код:
$this_comm=0; $level=0; $c_div=0;
echo parents().'</div>'; //<br>
//if ($number>2) echo '</div>';
if ($number>2) echo '<div class="sp_comm_links">Показать комментарии</div></div>';
}
?>

Сейчас обстоит все таки образом, если в скрытые комментарии попадает 1 древовидный комментарий, то и остальные любые добавленные комментарии отображаются нормально

1. добавлены 2 обычных комментария

[Изображение: tid_135_comm_8.png]

2. Добавляется 1 древовидный комментарий, который будет скрыт и появится ссылка "Показать комментарии"

[Изображение: tid_135_comm_9.png]

Если далее добавлять обычный или древовидный комментарий, то скрипт работает прекрасно.

3. Если добавить первым не древовидный, а обычный комментарий, котрый будет скрыт, то не будет видно не ссылки не комментария, хотя в базе он есть.

[Изображение: tid_135_comm_10.png]

Видно что форма, сразу примыкает к последнему комментарию.
Если попробовать удалить из базы добавленный последний обычный комментарий и добавить вместо него древовидный комментарий, то все нормально, как описано в пункте 2.

т.е сейчас проблема только в добавлении обычных комментариев, которые должны быть скрыты и нормально отображаться.

Как в коде это поправить я не стал экспериментировать и обращаюсь к вам за помощью.

С уважением и заранее благодарен Yes.
12.06.2015 13:13:59
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #304
RE: Построение дерева иерархии или дерева комментариев
В первом коде замените echo '<div class="sp_comm_body"><div style="padding:0 10px 0;">'; на:

if ($up==0) echo '<div class="sp_comm_body">';
else echo '<div class="sp_comm_body"><div style="padding:0 10px 0;">';
12.06.2015 15:24:13
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #305
RE: Построение дерева иерархии или дерева комментариев
Огромное Вам спасибо Ok HappyYes.

В данный момент работает отлично, вот если бы вы еще помогли с идентификаторами скрытых сообщений, было бы вообще супер.

Как вы объясняли мне ранее, он нужен для переадресации к нужному комментарию, что очень удобно, дабы не объяснять человеку один и тот же вопрос несколько раз.

Переадресация на комментарии, которые не скрыты работает отлично, а те которые скрыты переходит только на страницу.

Понятно, что комментарии скрыты и значения id=0 в данный момент, но может быть есть способ, чтобы при клике на ссылку, например: _http://site.ru/read/info-1.html#m570

значения id извлекалось из базы и переход был к нужному комментарию.
Это будет занимать время, но учитывая, что переход по таким ссылкам не такой частый, то должно быть все нормально.

Спасибо вам еще раз Yesи заранее благодарен.
13.06.2015 00:33:22
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #306
RE: Построение дерева иерархии или дерева комментариев
Пришлось извернуться, но что-то вышло.

При переходе на страничку по якорю, все скрытые комментарии автоматически показываются и происходит прокрутка к указанному якорю.

Все это делается вот таким JS кодом:
Код:
$(document).ready(function(){
var anchor=window.location.hash.replace("#","");
if (anchor!=''){
    $('.sp_comm_links').text('Свернуть комментарии');
    $('.sp_comm_body').slideToggle(0);
    $('html,body').animate({scrollTop:$("#"+anchor).offset().top},0)
}
});
13.06.2015 20:35:33
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #307
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте, только что проверил в работе.

При добавлении данного скрипта у меня скрытые комментарии сразу появляются, хотя должны быть скрыты и внизу ссылка "Свернуть комментарии", т.е получается что скрытые комментарии не скрыты, а если кликнуть по ссылке "Свернуть комментарии", то комментарии сворачиваются и появляется ссылка "Показать комментарии".

Если на страницу захожу, то все комментарии видимые и ссылка внизу "Свернуть комментарии", как описал выше.
Что-то делаю не так ? Scratch
13.06.2015 22:07:27
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #308
RE: Построение дерева иерархии или дерева комментариев
А Вы по какой ссылке заходите? Если по обычной, то все комментарии должны быть скрыты. Если по ссылке с якорем (например, _http://usefulscript.ru/spoiler_smooth_opening.php#m309), то комментарии раскрываются и происходит прокрутка к якорю.
13.06.2015 23:29:44
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #309
RE: Построение дерева иерархии или дерева комментариев
Нет, я имел ввиду, что при добавлении данного кода:

Код:
$(document).ready(function(){
var anchor=window.location.hash.replace("#","");
if (anchor!=''){
    $('.sp_comm_links').text('Свернуть комментарии');
    $('.sp_comm_body').slideToggle(0);
    $('html,body').animate({scrollTop:$("#"+anchor).offset().top},0)
}
});

скрытые комментарии перестают быть скрытыми (они показываются сразу), а внизу появляются ссылка "Свернуть комментарии" согласно вышеприведенного js кода.

P.S.:
Цитата:А Вы по какой ссылке заходите? Если по обычной, то все комментарии должны быть скрыты

Да, я захожу по обычной ссылке, но комментарии не скрыты, а отображаются...
(Последний раз сообщение было отредактировано 13.06.2015 в 23:37:16, отредактировал пользователь ale10ey.)
13.06.2015 23:35:25
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #310
RE: Построение дерева иерархии или дерева комментариев
Чудеса! В четырех браузерах проверил - ничего само не открывается...
14.06.2015 00:20:12
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


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


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru