Доброго времени суток дорогой читатель моего блога! Сегодня нам предстоит, пожалуй, последний штрих, по работе с автоматической сменой динамических ссылок на чпу в пользовательской части блога. Заметка не большая, нам предстоит всего лишь изменить адрес обработчика (атрибута action тега формы) у модуля комментариев. Исправить придется всего три файла:
Это все, что нам необходимо будет сделать.
Небольшая заметка для тех кто в первый раз попал на мой блог. Как Вы могли заметить, цель сегодняшнего поста, отредактировать файлы, которых у Вас скорее всего нет. Возникает вопрос, зачем Вам продолжать читать эту страницу? В принципе не зачем. Но! Вам не интересно, что это за файлы (которые мы сегодня будем править), и где их взять?
Если интересно, то отвечу. Эти файлы появятся у Вас если Вы начнете читать цикл статей "Создать блог с нуля". Цикл пишется для аудитории которая хочет, без лишней теории, научится программировать на php. За практику я взял описание создания небольшого движка персонального блога. Код не сложный, поэтому очень хорошо подойдет для практического обучения.
Если Вам интересен данный цикл, то переходите вот по этой ссылке и приступайте к изучению. Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы точно не пропустите новые заметки цикла!
Открываем файл index.php и находим в нем строчки подключения. Заменяем их на вот эти строчки:
//МОДУЛЬ КОММЕНТОВ
if(isset($blog) AND $txtFUNCTION[1] == 1)
{
include("moduls/comm.php");
if(!isset($error_comm))$error_comm = "";
$comm = comm($blog,$error_comm,$chpu);//Выводим результат функции в переменную
$txt .= $comm;
}
//МОДУЛЬ КОММЕНТОВ
Ничего особенно тут не изменилось, как и описывал выше, добавил в параметры функции comm переменную chpu.
Давайте теперь откроем шаблон comm_form.html и исправим action у тега формы. Была вот такая строчка:
...
<form action="index.php?blog=[_id]#bottom" method="post" name="form">
...
сделаем вот такой:
...
<form action="[_action]#bottom" method="post" name="form">
...
Как видите ничего сложного нету =)
Изменениям подвергнется функция comm. Я дам Вам полный код этой функции, а ниже поясню все что я в нее добавил.
function comm($blog,$error,$chpu)//функция вывода комментариев
{
$result_index = mysql_query("SELECT * FROM comm WHERE blog='$blog' ORDER BY id");//Выводим из базы данных все записи где blog равен ID поста
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/comm.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
$i = 0;
do//Цикл do while
{
$commMASS[$i] = array($myrow_index[id],//0
$myrow_index[author],//1
$myrow_index[email],//2
$myrow_index[site],//3
$myrow_index[text],//4
$myrow_index[date_comm],//5
$myrow_index[blog],//6
$myrow_index[comm]);//7
$i++;
}
while($myrow_index = mysql_fetch_array($result_index));
$comm = messCOMM(0,$commMASS,$sm_read,0);//функция формирования сообщений
}
else $comm = "<p align='center'>Комментариев нет, Вы будите первым =)</p>";//Если записей нет, то вывести это сообщение
//-------------------------------------------------
//--------------------------ФОРМА------------------
//-------------------------------------------------
$form = file("templates/comm_form.html");//подключаем шаблон с формой
$form = implode("",$form);//функция file() возвращаем массив, поэтому склеиваем его
//Вывод ошибки
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);//если ошибок нет, то удаляем код-слово
//Вывод ошибки
//капча
include ("moduls/capcha.php");
$cods = capcha();
for($i=0;$i<4;$i++)
{
$form = str_replace("[_code".$i."]",$cods[$i][1],$form);//вставляем 4 кода в форму
$form = str_replace("[_img".$i."]",$cods[$i][3],$form);//вставляем 4 изображения в форму
if($cods[$i][5] == "true")$form = str_replace("[_q]",$cods[$i][4],$form);//вклеиваем вопрос в форму
}
//капча
//Определяем ссылку обработчика, если ЧПУ отключен то ссылка...
if($chpu == 0)$link = "index.php?blog=".$blog;//...динамическая
else//Если ЧПУ включено то
{
//выводим имя ЧПУ из базы данных по id поста
$result_link = mysql_query("SELECT nameurl FROM blog WHERE id='$blog'");
$myrow_link = mysql_fetch_array($result_link);
$link = "post/".$myrow_link['nameurl'];//склеиваем ЧПУ
}
$form = str_replace("[_action]",$link,$form);//ссылка обработчика
$form = str_replace("[_id]",$blog,$form);//вклеиваем id статьи в форму
$comm .= $form;
return $comm;//Выводим с генерированный html код
}
Слишком большая функция, поэтому объяснять нововведения буду с выдержкой из функции. В общем то поменялось тут совсем ничего. Во-первый, как уже писал в целях, добавил переменную chpu в параметр функции
function comm($blog,$error,$chpu)//функция вывода комментариев
{
...
}
Ну а во-вторых, добавил само условие выбора между чпу и динамичной ссылкой
...
//Определяем ссылку обработчика, если ЧПУ отключен то ссылка...
if($chpu == 0)$link = "index.php?blog=".$blog;//...динамическая
else//Если ЧПУ включено то
{
//выводим имя ЧПУ из базы данных по id поста
$result_link = mysql_query("SELECT nameurl FROM blog WHERE id='$blog'");
$myrow_link = mysql_fetch_array($result_link);
$link = "post/".$myrow_link['nameurl'];//склеиваем ЧПУ
}
$form = str_replace("[_action]",$link,$form);//ссылка обработчика
...
Тут даже не знаю что добавить =) и так все предельно ясно
В этом пункте тоже очень небольшое исправления. Необходимо переправить функцию header() в конце нашего обработчика. Если мне не изменяет память то у нас переброс пользователя осуществляется только по динамической ссылке.
Находим в обработчике вот такие строчки
header("location: index.php?blog=$blog#bottom");//Перенаправляем пользователя
exit;//обратно к форме с комментариями
исправляем их на вот такие
header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;//обратно к форме с комментариями
Таким образом пользователя будет перебрасывать на ту страницу с которой он отправил комментарий
Ну что ж, после этих не хитрых манипуляций с парочкой файлов, наш модуль комментариев стал одинаково работать как с включенным чпу так и с отключенным.
Совсем скоро мы закончим работу над реализацией человеко-понятных урл на нашем блоге. Нам по сути осталось (если я ничего не забыл) добавить несколько условий в генератор sitemap и rss и все, так что обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки.
Всего Вам наилучшего! У меня на сегодня все!
Исходник |