В данной теме мы хотим предложить Вам скрипт для создания на своем сайте формы для добавления комментариев к темам сайта. Данная форма нужна для того, чтобы посетители Вашего сайта могли оставлять отзывы и пожелания к темам сайта, а также задавать вопросы и получать на них ответы от администрации и других посетителей сайта.
Ранее на нашем сайте уже была создана подобная тема, в которой мы рассказывали о том, как создать на своем сайте форму добавления комментариев к темам, но с момента ее создания прошло много времени и уже многое изменилось. В данной темы мы хотим показать улучшенную и оптимизированную версию той формы добавления комментариев для сайта.
Для полноценной работы скрипта, приведенного в данной теме, Вам понадобиться в MySQL создать две таблицы: comment и ocenka_comment.
В таблице comment будут храниться комментарии посетителей и вся необходимая информация о данных комментариях. В таблице ocenka_comment будут храниться последние оценки к комментариям, поставленные посетителями.
Структура обеих таблиц приведена на скриншотах ниже:
Таблица comment.
Таблица ocenka_comment.
Для быстрого создания таблиц comment и ocenka_comment, воспользуйтесь следующими SQL запросами, приведенными ниже. Для создания таблицы comment используйте код:
CREATE TABLE IF NOT EXISTS ` comment ` ( ` id ` int ( 9 ) unsigned NOT NULL auto_increment , ` parent_id ` mediumint ( 9 ) unsigned NOT NULL default ‘0’ , ` first_parent ` mediumint ( 9 ) unsigned NOT NULL default ‘0’ , ` date ` int ( 10 ) unsigned NOT NULL , ` theme_id ` smallint ( 6 ) unsigned NOT NULL , ` login ` varchar ( 30 ) collate utf8_unicode_ci NOT NULL , ` message ` varchar ( 9999 ) collate utf8_unicode_ci NOT NULL , ` moderation ` tinyint ( 3 ) unsigned NOT NULL default ‘0’ , ` plus ` mediumint ( 9 ) NOT NULL default ‘0’ , ` minus ` mediumint ( 9 ) NOT NULL default ‘0’ , PRIMARY KEY (` id `), KEY ` theme_id ` (` theme_id `) ) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1 ;
А для создания таблицы ocenka_comment воспользуйтесь кодом:
CREATE TABLE IF NOT EXISTS ` ocenka_comment ` ( ` id ` int ( 10 ) unsigned NOT NULL auto_increment , ` date ` int ( 10 ) unsigned NOT NULL , ` comment_id ` mediumint ( 8 ) unsigned NOT NULL , ` ip ` int ( 10 ) unsigned NOT NULL , ` ocenka ` tinyint ( 3 ) unsigned NOT NULL , PRIMARY KEY (` id `) ) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1 ;
В результате выполнения приведенных выше SQL запросов у Вас в MySQL должны появиться таблицы, как на скриншотах выше.
После того, как необходимые таблицы в MySQL были уже созданы, в начало Ваших страничек, на которых будет присутствовать форма добавления комментариев (выше тега ) поместите следующий PHP код, предназначенный для обработки отправленных сообщений:
$time = time (); if ( session_id ()== » ) session_start ();
Не забудьте при подключении к Вашей MySQL базе в функции mysqli_connect() указать Ваши логин, пароль и имя БД.
Хотим обратить Ваше внимание на еще один важный момент — получение id идентификатора текущей темы. Т.к. нам неизвестно, какая структура БД у Вас на сайте, то Вам этот момент придется доделать самим, а именно получить id темы и поместить его в переменную $theme_id. В коде id мы получаем запросом после комментария «//получаем id текущей темы».
Далее, для нормального отображения комментариев и формы добавления комментариев к темам сайта нам понадобятся CSS стили. Для этого добавьте себе следующий CSS код:
Теперь, после того, как БД создана, и стили прописаны, можно приступать к коду, отвечающему за вывод и добавление комментариев.
В том месте странички, где должны выводиться оставленные посетителями комментарии, добавляем следующий PHP код:
Если Вы не планируете модерацию оставленных комментариев (чего бы мы Вам не советовали), то просто удалите and moderation=1 из последнего SQL запроса выше приведенного кода. Таким образом, все оставленные посетителями комментарии будут незамедлительно опубликованы.
Если Вы все-таки решили оставить модерацию комментариев, то Вам необходимо перейти в тему модерация комментариев на сайте, в которой приведен PHP код, который позволит Вам быстро изменять, удалять и публиковать оставленные посетителями комментарии.
Теперь Вам необходимо добавить форму для того чтобы посетители сайта могли оставлять комментарии. Для этого Вам понадобится добавить на сайт следующий PHP код:
Как Вы могли заметить, мы используем две практически одинаковые формы для отправки комментариев. Не стоит пугаться, т.к. одна форма постоянно видна, и предназначена для обычного добавления комментариев, в то время как вторая форма скрыта и появляется только при клике по кнопке «Ответить» и предназначена для ответов на уже имеющиеся комментарии.
Для добавления плавности при появлении и исчезновении формы ответа на уже существующие комментарии, а также для оценивания комментариев без перезагрузки странички, Вам потребуется подключить библиотеку jQuery. Делается это так:
Библиотека jQuery требуется для работы JavaScript кода, который и отвечает за все выше перечисленные функции. Оговоренный JavaScript код необходимо добавить на Ваш сайт, желательно где-нибудь в конце странички после приведенных PHP кодов и подключения библиотеки jQuery.
< script type = "text/javascript" > //Добавление в форму отправки комментария значений id родительских комментариев function comm_on ( p_id , first_p ) document . add_comment . parent_id . value = p_id ; document . add_comment . f_parent . value = first_p ; >
$( document ). ready (function() //Показать скрытое под спойлером сообщение $( «.sp_link» ). click (function() $( this ). parent (). children ( «.comm_text» ). toggle ( «normal» ); >);
//Показать форму ответа на имеющийся комментарий $( «.open_hint» ). click (function() $( «#hint» ). animate ( top : $( this ). offset (). top + 25 , left : $( document ). width ()/ 2 — $( «#hint» ). width ()/ 2 >, 400 ). fadeIn ( 800 ); >);
//Скрыть форму ответа на имеющийся комментарий $( «.close_hint» ). click (function()< $( "#hint" ). fadeOut ( 1200 ); >);
//Возврат рейтинга комментария и его обновление function rating_comm ( data ) $( «#rating_comm» + id_comm ). fadeOut ( 800 ,function() $( this ). html ( data ). fadeIn ( 800 ); >); > >);
Теперь Вам остается только добавить на свой сайт файл rating_comm.php, на который мы запросом jQuery.post() отсылаем оценки, поставленные комментариям. Файл rating_comm.php будет получать и обрабатывать поставленные (отправленные) оценки комментариям и высчитывать рейтинг комментариев. Файл rating_comm.php включает в себя следующий PHP код:
Данный скрипт позволяет оставлять только одну оценку к одному комментарию. Для того чтобы через некоторое время было возможно повторно оценить комментарий, необходимо удалять старые оценки из таблицы ocenka_comment. Для этого используйте следующий PHP код, который удаляет все оценки старше 30 дней:
$del_date = $time — 2592000 ; //время в секундах (2592000 сек. = 30 дней) $res = mysqli_query ( $db , «DELETE FROM ocenka_comment WHERE date ?>?>
После создания в MySQL указанных таблиц и добавления на свой сайт всех выше приведенных PHP и JavaScript кодов, у Вас должна получиться полноценная форма для оставления комментариев к темам сайта.