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

Сообщений: 352
У нас с: Nov 2014
Сообщение: #181
RE: Построение дерева иерархии или дерева комментариев
Доброе время суток,
Спасибо за ответ.
Я так и думал, что будет непросто это реализовать, чтобы все данные формы отправлять без перезагрузки странички, но если у вы придумаете какое-нибудь решение, то будет просто здорово.

У меня вопрос к вам насчет оценки комментариев, в данный момент у меня оценка работает таким образом, если кликнуть 2 раза (почему-то), то после перезагрузки появится оценка (1 или -1).
Имеется скрипт оценивания тем, но хотел бы реализовать с помощью скрипта, который имеется у вас в теме "Добавление комментариев на сайт". Ниже перечисленные коды из этой темы и хотел бы адаптировать под скрипт, который имеется сейчас.

1. Имеется в таблице comment поля minus и plus:
[Изображение: tid_135_rating.png]

2. Создал файл rating_comm.php
Код:
Код:
<?php
if (isset($_POST["comm_id"]) and is_numeric($_POST["comm_id"]))
    $obj=$_POST["comm_id"];
else $obj='';

if (isset($_POST["ocenka"]) and ($_POST["ocenka"]==0 or $_POST["ocenka"]==1))
    $ocenka=$_POST["ocenka"];
else $ocenka='';

if ($ocenka!='' and $obj>0) {
$ip=$_SERVER['REMOTE_ADDR'];

$db=mysqli_connect("localhost","admin","pswd","acad") or die();
$res=mysqli_query($db,"SELECT count(id),ocenka FROM ocenka_comment
         WHERE comment_id='".$obj."' and ip=INET_ATON('".$ip."')");

$number=mysqli_fetch_array($res);
if ($number[0]==0) {
    $res=mysqli_query($db,"INSERT INTO ocenka_comment (date,comment_id,ip,ocenka)
    values ('".time()."','".$obj."',INET_ATON('".$ip."'),'".$ocenka."')");

    if ($ocenka==0) $res=mysqli_query($db,"UPDATE comment SET minus=(minus+1)
                    WHERE id='".$obj."' LIMIT 1");
    else $res=mysqli_query($db,"UPDATE comment SET plus=(plus+1)
                    WHERE id='".$obj."' LIMIT 1");
}
elseif ($number["ocenka"]!=$ocenka) {
    $res=mysqli_query($db,"UPDATE ocenka_comment SET date='".time()."',
    ocenka='".$ocenka."' WHERE comment_id='".$obj."' and ip=INET_ATON('".$ip."')");

    if ($ocenka==0) $res=mysqli_query($db,"UPDATE comment SET minus=(minus+1),
                    plus=(plus-1) WHERE id='".$obj."' LIMIT 1");
    else $res=mysqli_query($db,"UPDATE comment SET plus=(plus+1), minus=(minus-1)
                    WHERE id='".$obj."' LIMIT 1");
}

$res=mysqli_query($db,"SELECT plus,minus FROM comment WHERE id='".$obj."' LIMIT 1");
$rating=mysqli_fetch_array($res);
echo '<b>'.( $rating["plus"]-$rating["minus"]).'</b>';
mysqli_close($db);
}
?>

<?php
$del_date=$time-2592000;    //время в секундах (2592000 сек. = 30 дней)
$res=mysqli_query($db,"DELETE FROM ocenka_comment WHERE date<".$del_date."");
?>

3. Подключаю js код:
Код:
<script>
    //Получение id оцененного комментария
$(".comm_plus,.comm_minus").click(function(){
    id_comm=$(this).parents(".comm_head").attr("id").substr(1);
});

//Отправление оценки комментария в файл rating_comm.php
$(".comm_plus").click(function(){
    jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:1},rating_comm);
});
$(".comm_minus").click(function(){
    jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:0},rating_comm);
});

//Возврат рейтинга комментария и его обновление
function rating_comm(data){
    $("#rating_comm"+id_comm).fadeOut(800,function(){
        $(this).html(data).fadeIn(800);
    });
}
</script>

При таком подключении нет изменений, так как у меня в коде где должны выводиться оставленные посетителями комментарии, сейчас так:

Код:
echo '<input type="image" src="../img/images/up.png" height="18px" width="19px" title="Хороший комментарий">';
echo '</form></td>'; //Комментарии
echo '<td width="10"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>'; //images
echo '<td width="20">'; //Плохой комментарий
echo '<form method="POST" action="'.$_SESSION[full_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="../img/images/down.png" height="18px" width="19px" title="Плохой комментарий">';

Не подскажите как реализовать данный момент, так как хотел бы использовать скрипт, который я не без вашей помощи уже сделал под себя и осталось несколько небольших нюансов и один из них является оценка комментариев без перезагрузки.
Все коды вроде есть, в базе данных поля добавлены и осталось подогнать под имеющийся у меня скрипт, чтобы работала оценка без перезагрузки.

Вы не можете сказать, почему именно 2 раза, а не один приходится кликать на изображение, чтобы поменялась оценка?

Извиняюсь, что продолжаю задавать вам вопросы, отнимая у вас время, но без вашей помощи было бы тяжело реализовать все моменты.

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

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #182
RE: Построение дерева иерархии или дерева комментариев
Вы смешали коды из новой и старой версий скрипта.

Структуры БД немного разные (но вроде поправили правильно), а вот JS коды и коды форм отличаются, вот и получается непонятно что.

Главная проблема в том, что новый JS код работает с элементами странички, имеющимися только в новой форме (так же важна их вложенность).

Тут нужно детально разбираться, хотя непонятно как JS скрипт у Вас вообще срабатывает, если в форме нет элементов comm_plus, comm_minus и comm_head.

Попробуйте взять из нового скрипта форму для отправки сообщений...
30.04.2015 18:26:21
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #183
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте,
Насчет предыдущего сообщения.
Я хотел бы воспользоваться вашим скриптом для оценивания тем, чтобы оценка работала без перезагрузки.

Просьба проверить, как выглядит все сейчас:
1. Скрин таблицы comment:
[Изображение: tid_135_table_comment.png]

Здесь добавляю 2 поля (plus и minus).

2. Скрин таблицы rating:
[Изображение: tid_135_table_rating.png]

Создал таблицу rating согласно скрипта для оценивания тем.

3. Создал rating.php
Код вставлять не буду он имеется у вас на странице со скриптом оценивания тем.
В этом файле я меняю threads на comment, так как поля plus и minus я создал не в таблице threads, а в таблице comment.

4. Добавил js код:
Код:
<script type="text/javascript">
$(".rating").click(function(){
jQuery.post("rating.php",{id:<?php echo $object; ?>,ocenka:$(this).attr("alt")},
     refresh_rating);
});

function refresh_rating(data) {
$("#rating_threads").html(data);
}
</script>
взятый также из скрипта оценивания тем.

5. Далее самое интересное:
Из скрипта оценивания тем:
"Далее во все темы сайта, которые нужно оценивать, необходимо добавить два кода. Первый код выводит изначальную оценку темы и содержит форму для оценивания:"

Код:
<?php
$object=111;    //id текущей темы

$db=mysqli_connect("localhost","логин","пароль","имя БД");
$res=mysqli_query($db,"SELECT plus,minus FROM comment WHERE id='".$object."' LIMIT 1");
$rating=mysqli_fetch_array($res);


echo '<img src="image\minus.png" class="rating" alt="0">';
echo '<span style="margin:10px;" id="rating_threads">'.($rating[plus]-
    $rating[minus]).'</span>';
echo '<img src="image\plus.png" class="rating" alt="1">';
?>

А у меня в скрипте такой код (часть кода):
Код:
echo '<td width="25" >';
echo '<form method="POST" action="'.$_SESSION[full_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="../img/images/plus.png" height="18px" width="19px" title="Хороший комментарий">';
echo '</form></td>'; //Комментарии
echo '<td width="10"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>'; //images
echo '<td width="20">'; //Плохой комментарий
echo '<form method="POST" action="'.$_SESSION[full_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="../img/images/minus.png" height="18px" width="19px" title="Плохой комментарий">';
echo '</form></td></tr></table>';


На данный момент не получается сделать, чтобы оценка работала без перезагрузки.
Имеется в таблице comment 2 поля (plus и minus), есть таблица rating, есть также js код и rating.php. Думаю, что проблема в 5 пункте, но как не пытался изменять свой код, чтобы заработала оценка, работает все также с перезагрузкой.

Просьба пояснить, в чем ошибка и что делаю не так.
Заранее благодарен.
(Последний раз сообщение было отредактировано 01.05.2015 в 00:01:38, отредактировал пользователь ale10ey.)
30.04.2015 23:58:26
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #184
RE: Построение дерева иерархии или дерева комментариев
С наступающими вас праздником 1 мая и днем победы 9 мая!!!
01.05.2015 10:44:14
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #185
RE: Построение дерева иерархии или дерева комментариев
Все верно проблема в 5 пункте, т.к. JS код должен работать с элементами, которых у Вас попросту нет на страничке.

Не вижу смысла "изобретать велосипед", т.к. подружить эти коды еще надо постараться. Предлагаю работать со скриптами из темы добавление комментариев на сайт
01.05.2015 20:04:32
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #186
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте,
Да я и пробовал подключить новую форму на сайте, но пока не работает и обсуждение этой темы на форуме, а эта форма полностью рабочая исключая оценки, которая работает, но с перезагрузкой, вот я и хотел, чтобы она заработала.

Все дело в том, что в скрипте оценивания тем так:
Код:
<?php
$object=111;    //id текущей темы

$db=mysqli_connect("localhost","логин","пароль","имя БД");
$res=mysqli_query($db,"SELECT plus,minus FROM threads WHERE id='".$object."' LIMIT 1");
$rating=mysqli_fetch_array($res);


echo '<img src="image\minus.png" class="rating" alt="0">';
echo '<span style="margin:10px;" id="rating_threads">'.($rating[plus]-
    $rating[minus]).'</span>';
echo '<img src="image\plus.png" class="rating" alt="1">';
?>

и javascript, я думаю тут ни причем, так как у меня имеется таблица rating и поля minus и plus в таблице comment вместо таблицы threads.

хотя в js code:
Код:
<script type="text/javascript">
$(".rating").click(function(){
jQuery.post("rating.php",{id:<?php echo $object; ?>,ocenka:$(this).attr("alt")},
     refresh_rating);
});

function refresh_rating(data) {
$("#rating_threads").html(data);
}
</script>

есть .rating и #rating_threads, которые я и прописывал для:

Код:
echo '<form method="POST" action="'.$_SESSION[full_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" [b]class="rating"[/b] src="../img/images/plus.png" height="18px" width="19px" title="Хороший комментарий">';
echo '</form></td>'; //Комментарии
echo '<td width="10"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>'; //images
echo '<td width="20">'; //Плохой комментарий
echo '<form method="POST" action="'.$_SESSION[full_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" [b]class="rating"[/b] src="../img/images/minus.png" height="18px" width="19px" title="Плохой комментарий">';
[b]echo '<span style="margin:10px;" id="rating_threads">'.($rating[plus]-
    $rating[minus]).'</span>';[/b]

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

Из комментария #1740 скрипта оценивания тем ваш комментарий:

"Ну так скрипт предназначен для оценивания чего-либо (тем, комментариев и т.д.), так что на данный момент получается что у Вас нечего оценивать, т.к. скрипт привязывается к каким-нибудь уже имеющимся идентификаторам (id)."

В том то и дело, что у меня все имеется для оценки комментариев и необходимо его только привязать, что хотел бы реализовать с вашей помощью Help.

Заранее благодарен и с уважением, Алексей.
01.05.2015 22:14:33
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #187
RE: Построение дерева иерархии или дерева комментариев
Я Вам и пытаюсь объяснить, что нужно делать много изменений. Изменения надо вносить и в структуру формы и в JS код т.к. в том виде в котором сейчас JS код он предназначен для оценивания только одного элемента на страничке.

Если внести все необходимые изменения, то мы все равно придем к форме и JS коду из новой темы добавления комментариев.
03.05.2015 20:56:53
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #188
RE: Построение дерева иерархии или дерева комментариев
Здравствуйте,
Согласен с вами, что нужно делать много изменений. Два дня пытался экспериментировать, почти получилось, но в итоге результата - нет и прислушаюсь к вашему совету, не буду работать со старой формой.

У меня к вам вопрос по новой форме. Все работает, но как реализовать, чтобы вместо javascript окон, например "Комментарий принят!" были сообщения внизу формы.
Из кода новой формы:
PHP код:
$_SESSION["send"]="Комментарий принят!";
    
header("Location: $mess_url#last"); exit; 

Пытался делать так:
PHP код:
$_SESSION[send]='Комментарий принят!';
$_SESSION[comment_mess_login]='';
$_SESSION[comment_user_text]='';
header("Location: $_SESSION[mess_url]#last");
exit; 

но не работает.

Если не сложно реализовать данный момент, буду вам благодарен.
04.05.2015 09:39:58
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #189
RE: Построение дерева иерархии или дерева комментариев
Опять Вы все пытаетесь усложнить... Big Grin

Из первого кода удаляем:
PHP код:
if (isset($_SESSION["send"]) and $_SESSION["send"]!="") {    //вывод сообщения
    
echo '<script type="text/javascript">alert("'.$_SESSION["send"].'");</script>';
    
$_SESSION["send"]="";


А под формой добавляем:
PHP код:
if (isset($_SESSION["send"]) and $_SESSION["send"]!="") {    //вывод сообщения
    
echo '<div align="center"><b>'.$_SESSION["send"].'</b></div>';
    
$_SESSION["send"]="";

04.05.2015 12:36:39
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #190
RE: Построение дерева иерархии или дерева комментариев
Доброе время суток,
Если удалить код и вставить, то данные отправляются с заполнением или без, никаких сообщений под формой нет, но данные заносятся в базу нормально. Scratch...
04.05.2015 21:11:06
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


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


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru