Скрипт подтверждения комментариев для нашего движка

 

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

 

 

Давайте я объявлю цели сегодняшнего поста

 

Цель

 

  • Первое что нам необходимо сделать, это вывести где нибудь информацию о том есть ли в базе данных не подтвержденные комментарии. Я предлагаю выводить данную информацию в списке материалов. Эта информация будет представлена в виде числа, так же данное число будет являться ссылкой ведущий к алгоритму подтверждения сообщений. Как то суховато написал, но думаю Вы поймете о чем я =) Для реализации данного момента необходимо будет отредактировать шаблон allcontent.html и подправить модуль allcontent.php

 

ссылка к скрипту снятия сообщения с премодерации

 

  • Далее напишем сам скрипт вывода не подтвержденных сообщений. Можно было бы использовать наш админ модуль comm.php но я решил создать новый, очень похожий на comm.php, алгоритм. К этому скрипту нам понадобится создать шаблон и обработчик.
  • Как видите, из скрина выше, у алгоритма списка не подтвержденных комментариев будет две ссылки.
    1. Разрешить - ссылка запустит ту часть скрипта которая обновляет информацию в базе данных (обработчик)
    2. К комм. - Эта ссылка будет вести к комментарию в админ панели, то есть на страницу где работает модуль comm.php (Так нам не придется писать новый алгоритм редактирования или удаления комментариев)

     

    ссылка ведущая к комментарию в админ панели

     

    Для того чтобы ссылка "К комм." работала корректно, а именно перемещала администратора именно к не подтвержденному комментарию, (представьте ситуацию когда на странице, на которую нас перенесет данная ссылка, находится сотня сообщений, администратору будет не легко найти нужный комментарий) на странице где работает админ модуль comm.php необходимо создать якорь, для этого нам понадобится чутка подправить шаблон comm.html.

  • Подключим наш под модуль к файлу index.php
  • И на по следок отредактируем главный шаблон админ панели - index.html. Необходимо будет подправить скрипт вызова визуального редактора таким образом, что бы редактор подключался только к форме добавления и редактирования поста.

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

 

Для новоприбывших

 

Небольшая заметка для тех кто на блоге в первый раз. Данный пост, как и большая часть заметок на моем блоге, является частью глобального цикла статей "Создать блог с нуля". Цикл повествует о разработке простого (а возможно уже и не простого =)))) движка персонального блога на php. По сути данный цикл является эдакими практическими уроками php. Если данный материал Вам показался интересным, то переходите по ссылке что я дал Выше, там опубликован весь список постов

Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки цикла!

 

Вывод информации о не подтвержденных комментариях

 

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

 

Шаблон allcontent.html

 

Исправления не большие, лишь новая ссылка в шапке списка с анкором - [_modercomm]

<a href="index.php?page=modercomm">[_modercomm]</a>

Анкор будет переделан (скриптом замены код-слова) в число. В общем давайте резину тянуть не буду, открываем файл allcontent.html и вставляем в него вот такой код:

<table width="750px" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td width="300px" height="30px" valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;">Название поста</td>
<td valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;">Автор поста</td>
<td valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;">Категория</td>
<td valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;">&nbsp;</td>
<td valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;"><a href="index.php?page=modercomm">[_modercomm]</a></td>
<td valign="top" style="font-weight:bold;border-bottom:1px solid #dcdcdc;">&nbsp;</td>
</tr>

[_while]
<tr>
<td width="300px" valign="top" style="border-bottom:1px solid #dcdcdc;"><a style="font-weight:100;" href="?page=edd_content&id=[_id]">[_title]</a></td>
<td valign="top" style="border-bottom:1px solid #dcdcdc;">[_author]</td>
<td valign="top" style="border-bottom:1px solid #dcdcdc;"><a style="font-weight:100;" href="?page=edd_cat&id=[_id]">[_cat]</a></td>
<td valign="top" style="border-bottom:1px solid #dcdcdc;" align="left"><a style="font-weight:100;" href="?page=cfgpost&id=[_id]"><img src="img/config.jpg" border="0px"></a></td>
<td valign="top" style="border-bottom:1px solid #dcdcdc;" align="left"><a style="font-weight:100;" href="?page=edd_comm&id=[_id]"><img src="img/edd.jpg" border="0px"></a></td>
<td valign="top" style="border-bottom:1px solid #dcdcdc;"><a style="font-weight:100;" href="?page=edd_content&del_post=[_id]"><img src="img/del.jpg" border="0px"></a></td>
</tr>
[_while]
</table>

 

Модуль allcontent.php

 

По сути нам всего лишь необходимо подсчитать комментарии имеющие статус 1 (то есть не подтвержден), и заменить новое код-слово на подсчитанное количество.

Открываем файл allcontent.php и редактируем функцию allcontent()

function allcontent()//Функция вывода списка постов
{
$sm_read = file("templates/allcontent.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

preg_match("/\[_while\](.*?)\[_while\]/s",$sm_read,$tamp_while);//Находим в шаблоне тут часть, которую будет ду вайлить

$result_index = mysql_query("SELECT id,author,title,cat FROM blog ORDER BY id DESC");//Выводим из базы данных посты
$myrow_index = mysql_fetch_array($result_index);

do
{
$copy_tamp = $tamp_while[1];//Сохраняем ту часть которая будет повторяться в отдельную переменную

if($myrow_index[cat] != 0)
{
$result_cat = mysql_query("SELECT name FROM menu WHERE id='$myrow_index[cat]'");//Выводим из базы имя пункта
$myrow_cat = mysql_fetch_array($result_cat);

$name_cat = $myrow_cat[name];
}
else $name_cat = "Нет категории";

//Делаем замены код-слов
$copy_tamp = str_replace("[_title]",$myrow_index[title],$copy_tamp);//Название поста
$copy_tamp = str_replace("[_author]",$myrow_index[author],$copy_tamp);//Автор
$copy_tamp = str_replace("[_id]",$myrow_index[id],$copy_tamp);//ID постов
$copy_tamp = str_replace("[_cat]",$name_cat,$copy_tamp);//Имя категории

$list .= $copy_tamp;//Объединяем результат в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));

$sm_read = preg_replace("/\[_while\].*?\[_while\]/s",$list,$sm_read);//Вставляем в шаблон список постов

//вывод кол-ва не подтвержденных комментариев
$result_modercomm = mysql_query("SELECT COUNT(*) FROM comm WHERE status='1'");//Выводим из базы данных число не подтвержденных комм
$modercomm = mysql_fetch_array($result_modercomm);

$sm_read = str_replace("[_modercomm]",$modercomm[0],$sm_read);//число не подтвержденных комм.
//вывод кол-ва не подтвержденных комментариев

return $sm_read;//Выводим с генерированный html код
}

Внимание вот на эту часть кода:

//вывод кол-ва не подтвержденных комментариев
$result_modercomm = mysql_query("SELECT COUNT(*) FROM comm WHERE status='1'");//Выводим из базы данных число не подтвержденных комм
$modercomm = mysql_fetch_array($result_modercomm);

$sm_read = str_replace("[_modercomm]",$modercomm[0],$sm_read);//число не подтвержденных комм.
//вывод кол-ва не подтвержденных комментариев

Это и есть новшества функции allcontent()

Теперь при переходе к списку постов мы видим в шапке количество не подтвержденных комментариев

 

количество не подтвержденных комментариев

 

Алгоритм снятия сообщения с модерации

 

По сути мы будем иметь такой же список комментариев как и в работе админ модуля comm.php, за исключение шаблона. Шаблон будет содержать две других ссылки (в случае с модулем comm.php кнопки были "редактировать" и "удалить") Давайте начнем и создадим шаблон

 

Шаблон modercomm.html

 

Вот код шаблона, назвал я его modercomm.html и поместил в админскую папку templates.

<div style="width:500px;border:1px solid #dcdcdc;margin:auto;margin-bottom:20px;text-align:left;padding:5px;overflow:auto;">
<div style="float:left;">
<p style="font-size:9px;font-weight:bold;margin-bottom:10px;">[_author]|[_dateG]</p>
<p style="font-size:12px;">[_text]</p>
</div>
<div style="float:right;">
<div><a href="?page=modercomm&mcomm=[_id]">Разрешить</a></div>
<div><a href="?page=edd_comm&id=[_blog]#comm[_id]">К комм.</a></div>
</div>
</div>

Ссылка "Разрешить" содержит GET запрос, который создаст переменную mcomm. Наличие данной переменной запустит скрипт который поменяет некоторые значения в базе данных.

Ссылка "К комм.", как я уже говорил, ведет на страницу редактирования комментариев. На этой странице администратор сможет либо удалить комментарий либо отредактировать, если это необходимо.

 

Под модуль modrcomm.php - функция modercomm()

 

Теперь давайте напишем функцию вывода не подтвержден комментариев. Создаем новый файл, я назвал его modrcomm.php и поместил в админскую папку moduls, и пишим в нем следующую функцию:

function modercomm()//функция вывода списка комментариев
{
$sm_read = file("templates/modercomm.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

$allcomm = mysql_query("SELECT * FROM comm WHERE status='1'");//Выводим из базы данных все комментарии из определенного блога
$comm_blog = mysql_fetch_array($allcomm);
if($comm_blog != "")//Если комментарии
{
do//То формируем список
{
$copy_tamp = $sm_read;//создаем копию шаблона
$copy_tamp = str_replace("[_author]",$comm_blog[author],$copy_tamp);//Автор
$copy_tamp = str_replace("[_dateG]",$comm_blog[date_comm],$copy_tamp);//Дата
$copy_tamp = str_replace("[_text]",$comm_blog[text],$copy_tamp);//Текст
$copy_tamp = str_replace("[_id]",$comm_blog[id],$copy_tamp);//Инфо из колонки ID в табл
$copy_tamp = str_replace("[_blog]",$comm_blog[blog],$copy_tamp);//Инфо из колонки blog в табл
$res .= $copy_tamp;//объедением результат в одну переменную
}
while($comm_blog = mysql_fetch_array($allcomm));
}
else $res = "<p align='center'>Комментариев нет!</p>";//Если нет комментариев то выведем сообщение

return $res;//Выводим с генерированный html код
}

В этой функции нет ничего сложного, думаю Вы без труда разберетесь.

 

Под модуль modrcomm.php - обработчик функции

 

Теперь давайте напишем обработчик. В самый верх файла modrcomm.php вставляем следующий скрипт

//--------------СНЯТЬ С ПРЕМОДЕРАЦИИ
if(isset($_GET['mcomm']))$mcomm = $_GET['mcomm'];
if(isset($mcomm))
{
//выводим из бд мыло и id поста
$userDBR = mysql_query("SELECT email,blog FROM comm WHERE id='$mcomm'");
$userDB = mysql_fetch_array($userDBR);

$edd_commPR = mysql_query ("UPDATE comm SET status='0' WHERE id='$mcomm'");//обновляем статус
$edd_userPR = mysql_query ("UPDATE whitelist SET status='0' WHERE email='".$userDB['email']."'");//обновляем статус мыла в белом листе

header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;//обратно к форме с комментариями
}
//--------------СНЯТЬ С ПРЕМОДЕРАЦИИ

Данный скрипт меняет статус электронной почты в таблице whitelist и статус присланного сообщения с этой почты. Таким образом мы одним кликом разрешаем пользователю писать сообщения уже без вмешательства администратора и подтверждаем уже присланные пользователем комментарии.

 

Якорь для модуля comm.php

 

Тут все очень просто, необходимо в шаблоне comm.html в самом верху добавить якорь, и все =) Вот новый код шаблона comm.html:

<a name="comm[_id]">&nbsp;</a>
<a href="?page=edd_comm&edd_comm=[_id]"><img src="img/edd.jpg" border="0px"></a>
<a href="?page=edd_comm&del_comm=[_id]&id=[_blog]"><img src="img/del.jpg" border="0px"></a>
<div style="width:500px;border:1px solid #dcdcdc;margin:auto;margin-bottom:20px;text-align:left;padding:5px;">
<p style="font-size:9px;font-weight:bold;margin-bottom:10px;">[_author]|[_dateG]</p>
<p style="font-size:12px;">[_text]</p>
</div>

 

Подключение нового под модуля

 

Открываем админсткий файл index.php и сразу после подключения модуля списка комментариев пишем следующее:

//МОДЕРАЦИЯ КОММЕНТАРИЕВ
if($page == "modercomm")
{
include("moduls/modercomm.php");
$txt = modercomm();
}
//МОДЕРАЦИЯ КОММЕНТАРИЕВ

Ничего сложного =)) Теперь наш модуль белого списка можно считать полностью рабочим. На блоге будут выводится только те комментарии которые прошли проверку и были подтверждены администратором

 

Исправления глюка с подключение визуального редактора

 

Для этого необходимо открыть index.html и исправить подключение редактора

<script type="text/javascript">
tinyMCE.init({
mode : "exact",
elements : "txt_post",
theme:"advanced",
language:"ru"
});
</script>

Поправки следующие:

  • mode теперь не textareas, что означало подключать ко всем элементам формы textareas, а exact. Данный режим позволяет указывать, по id элемента формы, какие поля необходимо заменить на визуальный редактор.
  • Добавлен параметр elements : "txt_post", что означает подключать редактор только к полям чей id равен txt_post. Именно такой id имеют наши поля в модулях добавить и редактировать посты.

 

Заключение

 

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

Всего Вам наилучшего! У меня на сегодня все!

Исходник

_________

P.S.: Ищите какую нибудь партнерскую программу для заработка? Если да то у меня есть одна на примете - партнерка интернет магазина. Прелесть ее в том (ИМХО), что в каталоге имеются разделы посвященные развлекательным товарам, а как мне известно такие товары в пользуются хорошим спросом =)

 

Возможно Вам будут интересны следующие заметки

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Вы не подтвердили условия политики конфиденциальности.
К данной статье пока нет комментариев.