Доброго времени суток дорогой читатель моего блога. Сегодня мы с Вами доделаем модуль белого списка. Напомню, что нам осталось реализовать скрипт который будет изменять статусы присланных, новыми пользователями, сообщений. Так же я нашел очень не приятный глюк, а именно то, что формы редактирования комментария принимают вид установленного нами визуального редактора tinyMCE, по задумки так быть не должно поэтому мы подправим код вызова редактора исправив тем самым этот досадный глюк.
Давайте я объявлю цели сегодняшнего поста
Для того чтобы ссылка "К комм." работала корректно, а именно перемещала администратора именно к не подтвержденному комментарию, (представьте ситуацию когда на странице, на которую нас перенесет данная ссылка, находится сотня сообщений, администратору будет не легко найти нужный комментарий) на странице где работает админ модуль comm.php необходимо создать якорь, для этого нам понадобится чутка подправить шаблон comm.html.
Возможно все, что я тут сейчас написал большинство не поймет, но надеюсь данная информация пригодится Вам когда Вы будите просматривать листы кода который я выложу ниже.
Небольшая заметка для тех кто на блоге в первый раз. Данный пост, как и большая часть заметок на моем блоге, является частью глобального цикла статей "Создать блог с нуля". Цикл повествует о разработке простого (а возможно уже и не простого =)))) движка персонального блога на php. По сути данный цикл является эдакими практическими уроками php. Если данный материал Вам показался интересным, то переходите по ссылке что я дал Выше, там опубликован весь список постов
Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки цикла!
Как писал в целях, нам понадобится где нибудь вывести данную информацию, если этого не сделать то администратор может и не узнать о том, что некоторые отосланные сообщения были заблокированы движком. Долго думал где бы данную информацию вывести, ничего умного не придумав решил внедрить ее в список материалов, поэтому давайте подправим шаблон, а после сам модуль
Исправления не большие, лишь новая ссылка в шапке списка с анкором - [_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;"> </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;"> </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>
По сути нам всего лишь необходимо подсчитать комментарии имеющие статус 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 и поместил в админскую папку 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 и поместил в админскую папку 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 вставляем следующий скрипт
//--------------СНЯТЬ С ПРЕМОДЕРАЦИИ
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.html в самом верху добавить якорь, и все =) Вот новый код шаблона comm.html:
<a name="comm[_id]"> </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>
Поправки следующие:
Ну что же, еще одна возможность нашего движка реализована. В следующих заметках мы, скорее всего, начнем реализовывать модуль опроса, так что не "переключайтесь" и подпишитесь на RSS ленту блога через ридер, или же по почте
Всего Вам наилучшего! У меня на сегодня все!
Исходник |
_________
P.S.: Ищите какую нибудь партнерскую программу для заработка? Если да то у меня есть одна на примете - партнерка интернет магазина. Прелесть ее в том (ИМХО), что в каталоге имеются разделы посвященные развлекательным товарам, а как мне известно такие товары в пользуются хорошим спросом =)