RuKoder.ru RUKODER.ru
11 ФЕВР 2012
0

Скрипт древовидных комментариев PHP

PHP | JavaScript
index.php
<?
$conf['db'] = array(
  "server"=>"localhost",
  "user"=>"root",
  "pass"=>"",
  "base"=>"superbase"
);

mysql_connect($conf['db']['server'], $conf['db']['user'], $conf['db']['pass'])or die("Could not connect: ".mysql_error());
mysql_select_db($conf['db']['base'])or die("Could not select: ".mysql_error());
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

if($_GET['op'] === 'clear-all'){
  mysql_query("DELETE FROM les_comments");
  header("Location: index.php");
}

$time = time();
  
if(isset($_POST['uname'])){
  $uname = mysql_real_escape_string($_POST['uname']);
  setcookie("unamecom", $uname, $time + 1209600);   // время существования куки две недели
}elseif(isset($_COOKIE["unamecom"])){
  $uname = mysql_real_escape_string($_COOKIE["unamecom"]);
}else{
  $uname = "Аноним";
}

if(!empty($_POST['uname']) && !empty($_POST['message']) && $_POST['op'] == 'add-comment') {


  $comment = mysql_real_escape_string(strip_tags($_POST['message'], "<p><b><i><font><img>")); // удалим левые теги
  $ip = $_SERVER['REMOTE_ADDR'];
  $client = $_SERVER['HTTP_USER_AGENT'];
  $content_id = intval($_POST['content']);
  $parent_id = intval($_POST['parent']);

  mysql_query("INSERT INTO les_comments (`id`, `name`, `ip`, `client`, `comment`, `content_id`, `parent_id`, `time`) VALUES (NULL, '$uname', '$ip', '$client', '$comment', '$content_id', '$parent_id', '$time')");
}

/*
*/

$content_id = 0;  // это ключевой идентификатор от конкретной статьи(комменты то разные в каждой статье, помним?)

// выводим комменты
$msg = array();
$result = mysql_query("SELECT * FROM les_comments WHERE content_id='$id'");
while($row = mysql_fetch_assoc($result)){
  $msg[] = $row;
}
$count = count($msg);

$parent = 0;
$form = "<div class='editor'>
<form id='comment-form' autocomplete='off' method='post'>
<input type='hidden' name='op' value='add-comment'>
<input type='hidden' name='content' value='{$id}'>
<input type='hidden' name='parent' value='{$parent}'>
<table border='0'><tr><td><input id='uname' name='uname' type='text' value='{$uname}' maxlength='20' size='25' /></td><td>Ваше имя*</td></tr></table>
<textarea name='message' rows='5' cols='65'></textarea><br><input id='submit' name='signup' type='submit' value='Добавить' /></div>
</form>";

$i = 0;
if($count){
  $comments = "<div class='comments-all'><span style='float:left'>Всего комментариев: {$count}</span><span class='add-comment'>Написать комментарий</span></div>".$form;
  
  $msg = crazysort($msg);
  while($i<$count){
    $margin = $msg[$i]['level'] * 20;
    $date = date("d.m.Y в H:i",$msg[$i]['time']);
    $comments .= "<div id='msg{$msg[$i]['id']}' style='margin-left: {$margin}px'><div class='comment-title'><span style='float:left'><b>{$msg[$i]['name']}</b> <small>({$date})</small></span><span class='comment-ans' id={$msg[$i]['id']}>ответить</span></div><div class='comment-message'>{$msg[$i]['comment']}</div></div>";
    $i++;
  }  
}else{
  $comments = "<div class='comments-all'><span style='float:left'>Эту новость ещё не комментировали</span><span class='add-comment'>Написать комментарий</span></div>".$form;
}

// функция сортирует массив по деревьям
function crazysort(&$comments, $parentComment = 0, $level = 0, $count = null){
  if (is_array($comments) && count($comments)){
    $return = array();
    if (is_null($count)){
      $c = count($comments);
    }else{
      $c = $count;
    }
    for($i=0;$i<$c;$i++){
      if (!isset($comments[$i])) continue;
      $comment = $comments[$i];
      $parentId = $comment['parent_id'];
      if ($parentId == $parentComment){
        $comment['level'] = $level;
        $commentId = $comment['id'];
        $return[] = $comment;
        unset($comments[$i]);
        while ($nextReturn = crazysort($comments, $commentId, $level+1, $c)){
          $return = array_merge($return, $nextReturn);
        }
      }
    }
    return $return;
  }
  return false;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/reset/reset-min.css"/>
<title>Древовидные комментарии для Вашего сайта</title>
<meta name="keywords" content="http://amatar.by комменты"/>
<link rel='stylesheet' type='text/css' href='css/style.css'/>
<script type='text/javascript' src='js/jquery-1.5.2.min.js'></script>
<body>
<div style='margin:0 auto; width:780px'>
<?
echo $comments;
echo "<center><a href='?op=clear-all'>очистить все комменты</a></center>";
?>
</div>
<script>
$(function () {
  $('.add-comment').click(function(){
    var editor = $('.editor');
    if (editor.is(":hidden")){
      editor.slideDown();
    }else{
      editor.slideUp();
    }
    return false;
  });
  
  $('.comment-ans').click(function(){
    var $editor = $('.editor');
    $editor.hide();
    var mid = $(this).attr("id");
    var clone = $editor.clone();
    $editor.remove();
    setTimeout(function(){
      $(clone).css("margin", "5px 0 5px 20px");
      $(clone).insertAfter("div#msg"+mid).slideDown();
      $("input[name=parent]").val(mid);
    }, 200);
  });
    
});
</script>
</body>
</html>


sql
CREATE TABLE IF NOT EXISTS `les_comments` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `ip` VARCHAR(15) NOT NULL,
  `client` VARCHAR(250) NOT NULL,
  `comment` TEXT NOT NULL,
  `content_id` INT(11) NOT NULL DEFAULT '0',
  `parent_id` INT(11) NOT NULL DEFAULT '0',
  `time` INT(10) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`)
) ENGINE=MYISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


style.css
html,body{background-color:#C9CCCD;color:#000000;height:100%;font:normal 14px/20px arial}

.clear{clear:both}

.comments-all{font-size:12px;background-color:#E4E6E6; background-image:url('/images/h-rule.gif');background-repeat:no-repeat;margin-top:30px;margin-bottom:20px;padding:10px 20px; height:20px}
.add-comment{border-bottom:1px dashed #000; cursor:pointer; float:right}
.comment-title{font-size:12px; background-color:#EAEBEB; margin-top:20px; padding:5px 20px;height:20px}
.comment-message{font-size:12px; background-color:#F1F2F2; padding:5px 20px}

.comment{padding:40px 50px}
.editor{display:none; margin-top:1px;padding-top:20px; padding-left:20px;background-color:#F3F5F5}
.comment-ans{float:right; border-bottom:1px dashed #444; cursor:pointer}
#uname{font-size:16px; font-weight:bold;padding:5px;margin:10px 10px 10px 0}
#submit{padding:10px;margin:15px 0;font-weight:bold}

Комментарии (7)

  • DonalduutNV от 01.02.2021 в 09:11:16
    Добрый день господа Обустройство скважины с адаптером Рассмотрим пошаговый процесс монтажа адаптера Раскапывают траншею глубиной ниже уровня замерзания (1,5-2 метра) и шириной 0,5 метров для удобства монтажа.В обсадной трубе сверлят отверстие требуемого диаметра и обрабатывают его края.Подготавливают адаптер: сначала его очищают от технологической смазки, затем для надежной фиксации обрабатывают герметиком уплотнительные кольца.В обсадную трубу опускают адаптер , используя Т-образный ключ. Резьбовую часть заводят в подготовленное отверстие. Затем обе части конструкции соединяют между собой. К погружному насосу подключают питающий и греющий кабель. Верх обсадной трубы обрезают и закрывают крышкой.Монтируются вспомогательные приборы.Проверка работоспособности системы и ее герметичности.Засыпают траншею песком.Монтаж завершен. Обустройство скважины с помощью адаптера. В чем преимущества? Подходит для комфортного пользования скважиной круглый годОбустройство скважины с адаптером позволит использовать пространства на Вашем участке наиболее оптимально и сэкономит егоУстановка адаптера на глубине 1,5-2 метра препятствует замерзанию скважиныПростой монтаж и демонтаж в случае, владелец не пользуется домом зимой (насос с адаптером легко доставать и возвращать на место)Отсутствует необходимость проведения земельных работ при обустройстве скважиныСвоим качеством в работе не уступает другим видам обустройства скважинВыгодно и экономично для заказчика Как влияет материал адаптера на срок его службы при обустройстве скважины? Рассмотрим, из каких материалов может изготавливаться адаптер: Адаптер из латунных сплавов является самым дешевым вариантом и служит 5-7 летБронзовый адаптер может исправно эксплуатироваться до 25 лет. Но этот материал дорогой и редко встречается в продаже.Адаптер из нержавеющей стали наиболее популярный вариант ввиду своих свойств. Способен проработать исправно до 25 лет. Его отличительная особенность в том, что адаптер не склонен создавать с течением времени вредные примеси в питьевой воде, добываемой из скважины.Адаптер из сплавов DZR обладает устойчивостью к потере цинка, то есть к коррозии. Питьевая вода не портиться при использовании такого адаптера совершенно не портится. DZR-адаптер хорошо служит долгие годы.
    0 0
  • gamesellruGK от 16.05.2021 в 17:56:24
    I understand this question. Let's discuss.
    2 1
  • DonaldbmnNV от 14.06.2021 в 04:34:44
    Приветствую Вас господа Обустройство скважины с кессоном из бетонных колец Использование кессона из бетонных колец при обустройстве скважины – правильный выбор в пользу долгой службы Вашей скважины – порядка 70-100 лет. Бетонная конструкция самая прочная и устойчивая из всех конструкций, использующихся при защите и обустройстве скважин. Такие кессоны под своей тяжестью не сдвинуться даже под большим напором воды. Отменная защита Вашей скважине гарантирована. Монтаж кессона из бетонных колец и завершение обустройства скважины: Вокруг обсадной трубы экскаватор выкапывает котлован шириной около 2 м. Данные для глубины берутся из паспорта на скважину. Дно котлована выравнивают. С помощью крана на дно котлована опускают бетонную плиту с отверстием для обсадной трубы – дно будущего кессона. Использование донной плиты обязательно ввиду риска усадки и вымывания грунта под кессоном. Далее с помощью крана на бетонной плите размещают от 2 до 4 бетонных колец. Стандартная высота кольца составляет 90 см. Далее рабочий с помощью лестницы спускается вниз, заделывает стыки бетонных колец цементным раствором. Отверстие вокруг обсадной трубы засыпается плотно мелким щебнем либо цементно-песчаной смесью. В первом бетонном кольце проделывают отверстия для вывода труб. Выкапывают траншею от кессона в дом, для прокладки водопровода. Прокладывают водопровод. Выводят систему полива участка. Устанавливают в кессоне гидроаккумулятор, фильтр, системы автоматики. Поверх бетонных колец опускают верхнюю плиту. Отверстие для обслуживания обустроенной скважины закрывается полимерной крышкой люка. Стыки заделывают цементным раствором. Щели вокруг кессона засыпаются выкопанным ранее песком.Монтаж кессона и обустройство скважины закончено
    0 0
  • RoyalCaninDU от 04.07.2021 в 23:33:26
    Хорошая подборка.Первая СУПЕР.Поддержую.
    0 1
  • TomAlko от 30.09.2022 в 06:01:31
    Скрипт переписал на mysqli работает как часики...
    0 0
  • Avenue17CI от 07.02.2023 в 21:03:54
    БОЛЬШОЙ ПОКЛОН СОЗДАТЕЛЯМ
    0 0
  • avenue17YQ от 11.08.2025 в 17:34:22
    да уж совсем не впечатлили.
    0 0

Добавить комментарий

Категории:

  • CSS (121)
  • PHP (301)
  • JavaScript (704)

Оставить на заметку в:

© 2026 RuKoder.ru