Прикручиваем модуль белого списка к нашему движку

 

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

 

 

Цель

 

Что же нам сегодня предстоит сделать? В общем то править придется везде понемножку. Затронем три файла:

  • comm_form.html - Добавим код-слово для вывода сообщения о том, что модерация включена, или о запрете комментирования.
  • comm.php - Запустим скрипт белого списка в обработчике, и изменим запрос на добавления нового комментария в базу данных.
    Так же необходимо будет изменить запрос выборки комментариев из базы данных (будем выводить только те сообщение которые разрешены).
    Добавим функцию удаления куки с уведомлением. Ну и на по следок напишем скрипт вывода уведомления (замена нового код-слова)
  • index.php - Необходимо будет изменить подключения модуля комментариев. Исправления не особо сложные, добавить пару новых переменных в параметры функции и перенести уведомления из куки в переменную
    Так же нужно будет объявить переменную whitelist. В прошлом посте я писал о том, что эта переменная отвечает за включения и выключения модуля белого списка.

 

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

 

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

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

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

 

Шаблон формы комментариев - comm_form.html

 

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

<p>Оставить комментарий</p>
[_error]
<p style="font-size:14px;color:red;margin:10px;" align="center">[_messWL]</p>
<form action="[_action]#bottom" method="post" name="form">
<input name="id_comm" type="hidden" value="[_id]">
<input name="recomm" id="recomm" type="hidden" value="0">
<br>
<input class="input" name="author_comm" id="author_comm" onclick="if(document.getElementById('author_comm').value == 'Автор*')document.getElementById('author_comm').value = ''" type="text" value="Автор*">
<br>
<input class="input" name="email_comm" id="email_comm" onclick="if(document.getElementById('email_comm').value == 'E-Mail* (не публикуется)')document.getElementById('email_comm').value = ''" type="text" value="E-Mail* (не публикуется)">
<br>
<input class="input" name="site_comm" id="site_comm" type="text" value="http://">
<br>

<div id="messFROM" class="input" style="display:none;">
<div style="text-align:right;position:relative;margin-bottom:-15px;font-size:10px;cursor:pointer;" onclick="reqcomm(0,'',1);">[X]</div>
Напишите Ваш ответ для <span id="reauthor" style="font-weight:bold"></span>.<br>Если Вы хотите написать не ответ, а новый комментарий то закройте это сообщение
</div>

<textarea class="input" name="txt_comm" id="txt_comm" onclick="if(document.getElementById('txt_comm').value == 'Введите текст*')document.getElementById('txt_comm').value = ''" rows="10">Введите текст*</textarea>
<p style="margin:0px;">Если вы человек, то нажмите на картинку "<span style="font-weight:bold;">[_q]</span>"</p>
<br>
<input id="code_comm" name="code_comm" type="hidden" value="">
<table width="160px" height="40px" cellpadding="0" cellspacing="0" border="0px">
<tr>
<td>
<img id="cp1OK" style="position:absolute;display:none;" src="img/okCPha.png" border="0px">
<img style="cursor:pointer;" onclick="capcha(1,'[_code0]');" src="[_img0]" border="0px">
</td>
<td>
<img id="cp2OK" style="position:absolute;display:none;" src="img/okCPha.png" border="0px">
<img style="cursor:pointer;" onclick="capcha(2,'[_code1]');" src="[_img1]" border="0px">
</td>
<td>
<img id="cp3OK" style="position:absolute;display:none;" src="img/okCPha.png" border="0px">
<img style="cursor:pointer;" onclick="capcha(3,'[_code2]');" src="[_img2]" border="0px">
</td>
<td>
<img id="cp4OK" style="position:absolute;display:none;" src="img/okCPha.png" border="0px">
<img style="cursor:pointer;" onclick="capcha(4,'[_code3]');" src="[_img3]" border="0px">
</td>
</tr>
</table>
<br><br><input class="sub" type="submit" value="Оставить комментарий">
</form>
<a name="bottom"></a>

[_messWL] - Новое код-слово, его функция Вам уже известна, так что продолжаем

 

Исправляем модуль comm.php - Обработчик

 

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

Что касается запроса, то нам необходимо добавить заполнения колонки status переменной status. Эта переменная определяется в ходе работы белого списка.

Я дам вам только ту часть обработчика, где по условию не существует переменной error_comm, вот код:

    if(!isset($error_comm))
{
include("moduls/whitelist.php");//белый список
//Избавляемся от кавычки
$id_comm = str_replace("'","&#039",$id_comm);
$txt_comm = str_replace("'","&#039",$txt_comm);

$txt_comm = str_replace("\n","<BR>",$txt_comm);//Заменяем переносы строки на тег <BR>

//Добавляем сообщение в базу данных
$result_add_comm = mysql_query ("INSERT INTO comm (author,text,date_comm,blog,email,site,comm,status)
VALUES ('$author_comm','$txt_comm','$date_comm','$id_comm','$email_comm','$site_comm','$recomm','$status')");

header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;//обратно к форме с комментариями
}

Ничего сложного, двигаемся дальше...

 

Исправляем модуль comm.php - функция удаления куки

 

Эта функция необходима для того, чтобы удалить куку сразу после того как код-слово [_messWL] будет заменено на это самое сообщение. Код функции не сложен, мы подобное уже писали.

Вот код который необходимо поместить в самый низ нашего файла comm.php

function deletCOOKIE($server_root)
{
preg_match("/http:\/\/(.*?)\//s",$server_root,$cookieSITE);
$cookieSITE = str_replace("www.","",$cookieSITE[1]);

setcookie("messW","",time()-300,"/",".".$cookieSITE);
}

 

Исправляем модуль comm.php

 

Параметры функции comm()

 

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

function comm($blog,$error,$mess,$chpu,$server_root)//функция вывода комментариев
{
...
}
  • $mess - Будет содержать уведомления для пользователя
  • $server_root - понадобится для функции deletCOOKIE()

Надеюсь трудностей с пониманием не возникло =)

 

Исправляем запрос на вывод сообщений из базы данных

 

Теперь нам необходимо изменить запрос для вывода комментариев из базы данных (в функции comm()). Выводить нужно только те сообщения которые были подтверждены, и имеют статус равный нулю. Исправляем запрос:

$result_index = mysql_query("SELECT * FROM comm WHERE blog='$blog' AND status='0' ORDER BY id");//Выводим из базы данных все записи где blog равен ID поста
$myrow_index = mysql_fetch_array($result_index);

Ничего сложного =)

 

Замена код-слова [_messWL]

 

Пришло время реализовать замену код-слова [_messWL] на содержимое переменной mess (эта переменная посылается через параметры функции comm()) и удалить куку с этим уведомлением.

Сразу после кода замены код-слова [_error]

//Вывод ошибки
if($error != "")//если есть ошибки
{
$error = explode("|",$error);//превращаем строку в массив
$echoERROR .= "<p style='color:red;margin:0px;'>Обнаружены следующие ошибки:</p>";//заголовок
for($i=0;isset($error[$i]);$i++)//цикл формирующий список ошибок
{
if($error[$i] != "")$echoERROR .= "<p style='color:red;margin:0px;'>>$error[$i]</p>";//ошибки
}
$form = str_replace("[_error]",$echoERROR,$form);//вывод ошибок на экран
}
else $form = str_replace("[_error]","",$form);//если ошибок нет, то удаляем код-слово
//Вывод ошибки

Пишим вот такой алгоритм:

//Вывод сообщение о включение премодерационного режима
if($mess != "")//если переменная с уведомлением не пустая
{
$form = str_replace("[_messWL]",$mess,$form);//вывод сообщения на экран
deletCOOKIE($server_root);//удаляю куку
}
else $form = str_replace("[_messWL]","",$form);//вывод пустоты на экран
//Вывод сообщение о включение премодерационного режима

 

Изменяем подключение модуля comm.php в index.php

 

Почти что закончили. Нам осталось отредактировать вызов функции comm(), объявить переменные messWLIST (она же $mess для функции comm()) и whitelist. В общем давайте я приведу Вам код, в нем разобраться проще чем в моих писульках =). Заменяем старое подключение модуля комментариев вот на такое:

//МОДУЛЬ КОММЕНТОВ
if(isset($blog) AND $txtFUNCTION[1] == 1)
{
include("moduls/comm.php");
if(!isset($_COOKIE['messW']))$messWLIST = "";
else $messWLIST = $_COOKIE['messW'];

if(!isset($error_comm))$error_comm = "";
$comm = comm($blog,$error_comm,$messWLIST,$chpu,$server_root);//Выводим результат функции в переменную
$txt .= $comm;
}
//МОДУЛЬ КОММЕНТОВ

Как видите добавилась объявление переменной messWLIST, она содержит уведомление или же пустоту, все зависит от того есть ли кука с уведомлением или нет.

Ну и параметры вызываемой функции comm() тоже немного преобразились =)

 

Объявление переменной whitelist

 

Самое последние, что осталось сделать, это после объявление переменной chpu, почти в самом верху файла index.php (точное расположение это переменной - сразу после подключение к базе данных), объявить переменную whitelist

$chpu = 1;//настройка включение выключение ЧПУ (1 - вкл; 0 - выкл)
$whitelist = 1;//настройка включения выключения белого списка

 

Теперь работа модуля будет зависеть именно от значение этой переменной

 

Заключение

 

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

Если Вы читаете мои заметки, и все еще не подписаны, то скорее подписывайтесь на RSS ленту блога через ридер, или же по почте =)

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

Исходник

_______

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

 

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

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

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