Пишем модуль Статьи для нашей CMS

 

Приветствую Вас на продолжение цикла статей "Разработка CMS блога" В этой статье мы будем писать модуль вывода статьи. Логика написания очень похожа на предыдущий наш модуль, можно даже сказать, что они идентичны, разница лишь в том, что этот модуль не будет выбирать из базы данных больше одной записи, а значит цикла do while{} в этом модуле не будет. Прежде чем мы приступим к написанию второго модуля, хочу Вас предупредить, что если Вы не читали предыдущих две статьи ( "Верстка нашего блога", "Пишем модуль 'Мини новости' для нашей CMS" ), то в этой Вам будет сложно понять содержания скриптов, так как я буду редактировать, уже ранние написанные файлы, которые Вы и в глаза то не видели

 

 

Так, что нам понадобится? Нам понадобится ранние написанный файл index.php, в него мы внесем некоторые исправления..Так же нам понадобится создать шаблон, он будет очень похож на шаблон мини новостей и собственно сам модуль. Модуль будет представлять собой функцию, в которую мы посылаем id нашей статьи, после чего текст из базы данных будет передаваться в шаблон, и все это выведется на экран пользователя...

Для начало подправим наш файл index.php Что собственно будем править? Все очень просто.. при запуске нашей главной страницы блога, по умолчанию срабатывает модуль news.php Мы пока что не ставили никаких условий препятствующие запуску этого модуля, именно поэтому он у нас запускается всегда, это то и будем исправлять. Если вспомнить, то ссылка на статью выглядит следующим образом "?blog=1", это означает что мы создаем глобальную переменную $_GET с идентификатором blog ($_GET['blog']) Вот вам и условие при котором не стоит подключать модуль news.php Вот как это выглядит в коде :

if($_GET['blog'])$blog = $_GET['blog'];//Определяем, есть ли глобальная переменная GET и если есть, то 
//переносим ее содержимое в переменную $blog

//МОДУЛЬ МИНИ НОВОСТЕЙ
if(!$blog)//Определяем, существует ли $blog, если НЕТ то подключаем модуль news.php
{
include("moduls/news.php");
$txt = index_page();//Выводим результат функции в переменную, которая отобразится на экране пользователя
//МОДУЛЬ МИНИ НОВОСТЕЙ
}

Далее мы приступим к созданию нашего нового модуля, и как обычно (я так делаю) начну с шаблона, вот код:

<div class="div_news">
<p class="title">[_title]</p>
<p>[_text]</p>
<p align="right"><a href="javascript:history.go(-1);">Назад</a></p>
</div>
<div class="div_footer">
Автор: [_author] | [_date_b]
</div>

Тут у нас те же самые код-слова которые в последствие заменятся на текст из базы данных. Я сохранил этот файл (text.html) в папке templates, куда собственно складываю все шаблоны.

Далее мы приступим к написанию самого модуля, вот код файла text.php

<?
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("[end]","",$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>";//Если записей нет, то вывести это сообщение
return $sm_read;//Выводим с генерированный html код
}
?>

Я сохранил этот файл в папку moduls

Осталось в файле index.php подключить этот модуль, и прописать условия его подключения. Условием будет присутствие переменной $blog, то есть если эта переменная объявлена, то вместо модуля news.php мы подключаем text.php. Вот как выглядит код:

//МОДУЛЬ CТАТЕЙ
if($blog)
{
include("moduls/text.php");
$txt = blog($blog);//Выводим результат функции в переменную, которая отобразится на экране пользователя
}
//МОДУЛЬ CТАТЕЙ

Этот кусок кода, как вы догадались вносится в файл index.php перед строкой

include("templates/index.html");

На этом собственно все, для теста заполните в базе данных таблицу blog, и увидите, что все прекрасно работает Если есть какие вопросы, пишите комментарии, постараюсь ответить. Удачи!

update: Если после запуска Вы наблюдаете не адекватную картину в виде каракозябр, или непонятных символов в верху ( типа вот таких - п»їп»ї ), то переходите вот к этому посту "Правильная кодировка у нашего движка". Эта проблема связана с кодировкой, так что ее, просто, необходимо сменить, и все =)


Исходник

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