Приветствую Вас на продолжение цикла статей "Разработка 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: Если после запуска Вы наблюдаете не адекватную картину в виде каракозябр, или непонятных символов в верху ( типа вот таких - п»їп»ї ), то переходите вот к этому посту "Правильная кодировка у нашего движка". Эта проблема связана с кодировкой, так что ее, просто, необходимо сменить, и все =)
Исходник |
Хочу ещё поинтересоваться: каким образом можно сделать ограничение на количество символов в превью статей (news.php), т.е. чтобы оправдать наличие кнопки "Читать дальше"?
Очень сложно тут что-то испортить, поэтому я думаю, что Вы просто спутали, обратите внимание при переходе с главной странице по кнопке "Читать дальше" ссылка в адресной строке меняется? И меняется ли ссылка "Читать дальше" на "Назад"?
Если Вы все же что-то напутали при сборке, то я теряюсь в догадках где.....
Проблема в том что я сохранил все файлы в utf-8, в базе данных в phpadmin у всех таблиц стоит сопоставление utf-8 general ci b у самой базы тоже. После добавления текста на русском в базу при просмотре через phpadmin отображается все нормально, но страницах сайта вместо русских символов отображаются вопросительные знаки(??????? ??? ??????)
Может кто подскажет как решить эту проблему? Пытался задать нужную кодировку через файл .htaccess, но создание этого файла в корневом каталоге (даже если он просто пустой) приводит к 500-й ошибке!
mysql_query("SET NAMES 'utf8'");
Файл news.php позволяет вывести из базы данных несколько анонсов заметок (анонсы это все то что переде словом [end]). Файл text.php выводит полный текст (то есть все что перед [end] и после него) лишь одной заметки.
mysql_query("SET NAMES utf8");
А если ты выводишь данные из базы на страницу (то что ты и делаешь), то используй:
mysql_query("SET character_set_results=utf8").
Попробуй, должно помочь.
Если да, то как сделать, чтобы она выглядела, к примеру, так: http://rio-shaman.ru/mysli/itog-2012--plany-na-2013/ ?
Где почитать, в каком направлении копать?
http://rio-shaman.ru/razrabotka-cms/uluchshenija/teorija-realizacii-chpu/
это можно как-то исправить? или данное сообщение скорее не ошибка, а просто денвер делится информацией, типо смотри какой я крутой?)
Ну при опубликования материалов на данном блоге я не раз говорил, что в программирование я новичок, и учился писать что-то сложнее калькулятора вместе с читателями...
я начал полностью переписывать работу концепции форка который реализовал на RSblog и вот
там реализовал модульность по своему и вот изо этого у меня почему то не работает ЧПУ и когда пытаюсь зайди в статью то он мне показывает белую страницу...понять в чем проблема немогу...посмотрите вот: Открыть
и скажите пожалуйста в чем может быть проблема.
Заранее благодарю вас =)
Скорее всего проблема именно в этом
<?
function index_page(){
....
}
function news($news_full){
...
}
?>