Всем привет! Добро пожаловать на Блог RS! Сегодня мы продолжим наполнять наш список настроек новым функционалом. У меня по плану ввести настройку позволяющую запретить, или на оборот, разрешить писать комментарии в определенных постах. По умолчанию модуль комментариев будет включен, но при необходимости, администратор блога, может запретить данный функционал.
Такая возможность для нашего проекта, однозначно, необходима! Ведь согласитесь, есть посты в которых форма комментирования вовсе не нужна! Примером является пост на моем блоге "Об Авторе".
Прежде чем мы начнем, хочу, как обычно я делаю , обратиться к новоприбывшим людям на блог. Этот пост, как и 99% всех остальных постов, является продолжением цикла статей "создания блога с нуля", поэтому материал изложенный в этом посте, может показаться Вам совершенно бесполезным. Если у Вас есть желание на практике научится писать на php, то переходите по ссылке, что я дал Вам выше, и приступайте к изучению
Если блог показался Вам интересным, то подпишитесь на RSS ленту блога через ридер, или же по почте.
Я перечислю пункты которыми мы сегодня займемся:
На сегодня этот все, что мы сделаем. На вид довольно много, но по сути в каждом модуле будет по 2-3 новых или переделанных строчки, так что ничего страшного
Ну что ж, приступим к реализации, нового пункта в списке
Заходим в нашу базу данных, выбираем таблицу blog -> Структуры.
Заполняем поля
Жмем "Сохранить". Теперь у нас есть новая колонка в таблице blog
Открываем шаблон, и редактируем таким образом. Я Вам дам весь код шаблона
<p align="right"><a href="index.php?page=all_content">К списку постов</a></p><br/>
<form action="index.php?page=cfgpost&id=[_id]" method="post" name="form">
<table width="400px" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td style="border-bottom:1px solid #dcdcdc;" width="250px" valign="top" align="left">Видим пост в ленте новостей?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="center">
<select name="viewindex">
[_cfgvi]
</select>
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" width="250px" valign="top" align="left">Разрешить комментировать пост?</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="center">
<select name="viewcomm">
[_cfgcomm]
</select>
</td>
</tr>
<tr>
<td valign="top" colspan="2" align="center">
<br/><br/><input type="submit" value="Сохранить настройки">
</td>
</tr>
</table>
</form>
<br/><br/>
Как видите я добавил еще одну строчку ( тег tr ) ну и новое код-слово [_cfgcomm]. Так же обратите внимание на атрибут name у нового тега select. В принципе минимальные изменения
Заходим в файл addcontent.php и правим запрос вот так
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b,cat,meta_d,meta_k,viewindex,viewcomm)
VALUES ('$txt_post','$name_post','$author_post','$date_cont','$menu_post','$metad_post','$metak_post','0','1')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
Мы всего лишь принудительно, при добавление постов в базу данных, вставляем в новую колонку единицу.
Я Вам вывешу весь код функции, и поясню чего я нового добавил
function configpost($id)//Функция вывода списка настроек поста
{
$result_index = mysql_query("SELECT viewindex,viewcomm FROM blog WHERE id='$id'");//Выводим из базы данных конфигурации поста
$myrow_index = mysql_fetch_array($result_index);
$sm_read = file("templates/configpost.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
//формирование вариантов выбора настроек
$vi = queCFG($myrow_index[viewindex]);//формируем option для пункта "Видим пост в ленте новостей?"
$vc = queCFG($myrow_index[viewcomm]);//формируем option для пункта "Разрешить комментировать пост?"
//Замена код-слов
$sm_read = str_replace("[_id]",$id,$sm_read);//ID поста
$sm_read = str_replace("[_cfgvi]",$vi,$sm_read);//видимость поста на главной странице
$sm_read = str_replace("[_cfgcomm]",$vc,$sm_read);//комм в постах
return $sm_read;//Выводим с генерированный html код
}
$result_index = mysql_query("SELECT viewindex,viewcomm FROM blog WHERE id='$id'");//Выводим из базы данных конфигурации поста
$vc = queCFG($myrow_index[viewcomm]);//формируем option для пункта "Разрешить комментировать пост?"
$sm_read = str_replace("[_cfgcomm]",$vc,$sm_read);//комм в постах
Давайте сразу же изменим обработчик. Нам необходимо перенести из глобальной переменной POST в обычную переменную новые данные, которые будут посланы администратором. И занести эти данные в базу данных. Вот полный код обработчика в файле configpost.php
//ОБРАБОТЧИК
//определяем переменные
if(isset($_POST['viewindex']))$viewindex = $_POST['viewindex'];
if(isset($_POST['viewcomm']))$viewcomm = $_POST['viewcomm'];
//обращение к БД
if(isset($viewindex) AND isset($viewcomm))//если переменная форма была заполнена и отправленна
{
$newCONFIG = mysql_query ("UPDATE blog SET viewindex='$viewindex',viewcomm='$viewcomm' WHERE id='$id'");//обнавляем настройки
header("location: ".getenv('HTTP_REFERER'));//Переносим пользовотеля на страницу с списком настроик
exit;
}
//ОБРАБОТЧИК
Совершено ничего сложного
Открываем этот файл, и в самом низу функции blog() добавим несколько новых строчек ( Я вывешу полный код функции )
function blog($blog)
{
$result_index = mysql_query("SELECT * FROM blog WHERE id = '$blog'");//Выводим из базы статью
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/text.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
$text = str_replace("<p>[end]</p>","",$myrow_index[text]);//Удаляем код-слово из текста
//(напоминаю, что этот [end] служит нам разделителем текста статьи, это нужно для вклеивания кнопки "Читать дальше")
//Замены идентификаторов на переменные из базы данных
$sm_read = str_replace("[_text]",$text,$sm_read);//Текст
$sm_read = str_replace("[_title]",$myrow_index[title],$sm_read);//Название статьи
$sm_read = str_replace("[_author]",$myrow_index[author],$sm_read);//Автор статьи
$sm_read = str_replace("[_date_b]",$myrow_index[date_b],$sm_read);//Дата размещения
}
else $sm_read = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
$result[0] = $sm_read;
$result[1] = $myrow_index[viewcomm];
return $result;//Выводим с генерированный html код
}
Мы создаем массив result. Первый элемент массива содержит с генерированный текст поста. Второй элемент будет содержать настройку касающуюся вывода модуля комментариев для этого поста. Надеюсь понятно что я тут сделал
Я вывешу Вам код двух подключений.
//МОДУЛЬ CТАТЕЙ
if($blog)
{
include("moduls/text.php");
$txtFUNCTION = blog($blog);//получаем из функции массив, который содержит текст поста и настройки
$txt = $txtFUNCTION[0];//Выводим текст поста в переменную, которая отобразится на экране пользователя
}
//МОДУЛЬ CТАТЕЙ
//МОДУЛЬ КОММЕНТОВ
if(isset($blog) AND $txtFUNCTION[1] == 1)
{
include("moduls/comm.php");
if(!isset($error_comm))$error_comm = "";
$comm = comm($blog,$error_comm);//Выводим результат функции в переменную
$txt .= $comm;
}
//МОДУЛЬ КОММЕНТОВ
В модуле статей теперь необходимо, результат функции blog(), поместить в отдельную переменную, так как результат функции представляет собой массив из двух элементов. Первый элемент это текст поста, его мы заносим в переменную txt
$txt = $txtFUNCTION[0];//Выводим текст поста в переменную, которая отобразится на экране
Второй элемент попадает в условие модуля комментариев
//МОДУЛЬ КОММЕНТОВ
if(isset($blog) AND $txtFUNCTION[1] == 1)
{
...
}
//МОДУЛЬ КОММЕНТОВ
Если $txtFUNCTION[1] будет равна единице, зачинит модуль подключится.
В противном случае
Если я ничего не забыл, то у нас в админ панели появился новый пункт настроек, с чем я Вас и поздравляю Если есть какие вопросы по этому посту, или вообще по всему циклу статей, то пользуйтесь формой ниже.
Если блог показался Вам интересным, то подпишитесь на RSS ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня все!
Исходник |
_______
P.S.: Хотите приобрести стильные солнцезащитные очки? Наткнулся на одни такие Представляю Вам очки frogskins! Как пишет автор, модель этих очков совпадает с моделью выпущенные еще в 80-ые, как мне кажется, очень даже симпатичные