Убираем модуль комментариев из нужных постов

 

Всем привет! Добро пожаловать на Блог RS! Сегодня мы продолжим наполнять наш список настроек новым функционалом. У меня по плану ввести настройку позволяющую запретить, или на оборот, разрешить писать комментарии в определенных постах. По умолчанию модуль комментариев будет включен, но при необходимости, администратор блога, может запретить данный функционал.

 

 

Такая возможность для нашего проекта, однозначно, необходима! Ведь согласитесь, есть посты в которых форма комментирования вовсе не нужна! Примером является пост на моем блоге "Об Авторе".

 

Предисловие

 

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

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

 

Цель

 

Я перечислю пункты которыми мы сегодня займемся:

  • Добавим в базу данных новую колонку
  • Изменим шаблон configpost.html, добавим новый пункт настроек
  • В модуле добавления постов ( addcontent.php ) изменим SELECT запрос. Сделаем так, что бы по умолчанию форма комментариев присутствовала в постах
  • Переделаем функцию вывода список настроек в файле configpost.php. Необходимо будет с генерировать html код с вариантами настроек, и вклеить этот код в шаблон configpost.html
  • Переделаем функцию вывода статей ( файл text.php ). Нам необходимо, что бы в этой функции производилась выборка настройки, после чего с помощью нее мы разрешим или запретим подключение модуля комментариев в файле index.php
  • Переделаем файл index.php. Введем условие подключение модуля комментариев.

На сегодня этот все, что мы сделаем. На вид довольно много, но по сути в каждом модуле будет по 2-3 новых или переделанных строчки, так что ничего страшного

Ну что ж, приступим к реализации, нового пункта в списке

 

Новая колонка в базе данных

 

Заходим в нашу базу данных, выбираем таблицу blog -> Структуры.

Заполняем поля

Жмем "Сохранить". Теперь у нас есть новая колонка в таблице blog

 

Редактируем шаблон configpost.html

 

Открываем шаблон, и редактируем таким образом. Я Вам дам весь код шаблона

<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')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ

Мы всего лишь принудительно, при добавление постов в базу данных, вставляем в новую колонку единицу.

 

Редактируем файл (configpost.php)

 

>Функция configpost($id)

 

Я Вам вывешу весь код функции, и поясню чего я нового добавил

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 код
}
  • Отредактировал запрос в базу данных. Если быть точнее добавил вывод информации из новой колонки viewcomm
$result_index = mysql_query("SELECT viewindex,viewcomm FROM blog WHERE id='$id'");//Выводим из базы данных конфигурации поста
  • Сформировал новую переменную vc, с помощью функции queCFG()
$vc = queCFG($myrow_index[viewcomm]);//формируем option для пункта "Разрешить комментировать пост?"
  • Заменил код слово на результат функции queCFG()
$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;
}
//ОБРАБОТЧИК

Совершено ничего сложного

 

Функция вывода статей. Файл text.php

 

Открываем этот файл, и в самом низу функции 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. Первый элемент массива содержит с генерированный текст поста. Второй элемент будет содержать настройку касающуюся вывода модуля комментариев для этого поста. Надеюсь понятно что я тут сделал

 

Изменяем подключение модуля комментариев в файле index.php

 

Я вывешу Вам код двух подключений.

//МОДУЛЬ 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-ые, как мне кажется, очень даже симпатичные

 

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

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Vasya, 13 Февраля 2012 г. 21:05 пишет:
Гость
А у вас будит статья на тему ЧПУ ? это довольно важная и интересная тема по моему даже у маленького движка должна быть поддержка ЧПУ )
Rio-Shaman, 13 Февраля 2012 г. 21:07 пишет:
Автор
95% что да. Вот только когда, пока еще не знаю =)
Ответ для пользователя: Vasya