Приветствую Вас на втором уроке, цикла "Разработка CMS" Сегодня мы будем писать модуль мини новостей. Я уже писал статью на тему этого модуля, так, что изобретать новое я не стану. В той статья, скажем была теория, сейчас же будет практика. Что нам понадобится? Нам понадобится база данных, и пару строк кода. В введение к этому циклу я не упомянул, что нам понадобится локальный сервер.
Я использую данвер, инструкция по установки есть на официальном сайте, так что если у Вас еще не стоит локальный сервер, то поставьте его, очень нужная вещь (Кстати, прошу прощение что не упомянул про него =()
Ну что ж, попытаюсь объяснить логику работы нашего блога... В админ панели мы добавляем какую нить новую статью, при загрузки главной страницы нашего блога, появляется небольшое описание нашей статьи (поста) ниже будет расположена кнопочка "читать дальше" (Про мысли о создание такой кнопки, можно почитать тут) Собственно как будет работать наш "модуль" При обращение сервера к файлу index.php подключается наш модуль (news.php) в котором определенна следующая логика:
Для начало конектимся к базе данных и проверяем, есть ли вообще статьи в блоге, после чего подключается шаблончик - html код с разметкой, отвечающий за расположение блоков описание статьи, название, автор статьи, дата размещения, всевозможные нужные ссылки, и тому подобное... заменяем в шаблоне идентификаторы на информацию из базы данных, после чего с генерированный код помещается в переменную и выводится на экран. В общих чертах думаю понятна работа модуля, на практики, должно все встать на свои места
В голову пришла идея накидать схему, если просмотреть ее то все станет понятно 

Для начало нам понадобится таблица в базе данных, создадим ее:
CREATE TABLE IF NOT EXISTS `blog` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
`title` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`date_b` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Далее по нарисованной мной схеме, правим файл index.php, в начале файла вставляем вот эти строчки
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
Далее по схеме у нас идет подключение модуля news.php. Все модули у нас будут лежать в папке moduls в корне сайта. Так что создаем такую папку на сервере, и пишем наш модуль. Его логика видна на схеме, вот код с комментариями:
<?
function index_page()
{
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");//Выводим из базы данных последние 10 записей
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("[end]",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_id]",$myrow_index[id],$edd_tamp);//id статьи, для вывода в полной статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$news .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $news = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $news;//Выводим с генерированный html код
}
?>
Для генерации html кода нам понадобится шаблон, разметка шаблона для новостей берется из файла index.html который мы верстали в предыдущей статье
Вот вырезка из файла index.html
<!--ТЕКСТ-->
<div class="div_news">
<p class="title">Введение</p>
<p>Хотел дописать свою CMS но увы дело это долгое по причине того, что постоянно придумываю что-то еще, и внедряю все новые элементы.. Боюсь что мое, так сказать, "дописывание" может никогда не закончится =) Эта небольшая статья будет содержать лишь цель моего (и Вашего) проекта. Написание статей на блоге помогает мне разобраться в написанном коде, и улучшать его. Тем самым этот цикл статей мне поможет точно, возможно он и поможет Вам. Писать будем скрипт блога. </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 09 Октября 2011 года 07:39
</div>
<div class="div_news">
<p class="title">Кнопка "Читать дальше"</p>
<p>Было время, пришлось задуматься...как же делают такой мини текст, после которого идет кнопка читать полностью... Постигая PHP с трудом верилось что это делается в ручную...На своем первом сайте я делал специальный столбец с мини текстом, и именно этот текст выводил на новостной странице, добавляя внизу кнопку "Читать дальше" Это работает, но мне кажется это как то не очень удобно... Я искал способ который бы подсчитывал символы в переменной, и обрезал, скажем после двухсот символов, переменную... Я до сих пор верю что такой способ есть, но я его не нашел =( Какое то время я пользовался таким способом: </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 03 Октября 2011 года 11:20
</div>
<!--ТЕКСТ-->
Тут мы видим повторяющийся блог
<div class="div_news">
...
</div>
Это и есть наш шаблончик мини новостей, копируем его, и вставляем в файл news.html который сохраним в папке templates. Следующим шагом будет замена текста на идентификаторы...вот готовый код шаблона news.html
<div class="div_news">
<p class="title">[_title]</p>
<p>[_text]</p>
<p align="right"><a href="?blog=[_id]">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: [_author] | [_date_b]
</div>
Все файлы для выполнения шага "подключение модуля news.php" у нас есть, так что подключаем. Для этого надо внести в index.php следующие изменения, перед
include("templates/index.html");вставляем следующий код
//МОДУЛЬ МИНИ НОВОСТЕЙ
include("moduls/news.php");
$txt = index_page();//Выводим результат функции в переменную, которая отобразится на экране пользователя
//МОДУЛЬ МИНИ НОВОСТЕЙ
И последним нашим шагом, является подключения шаблона index.html...так как этот шаг мы сделали в предыдущей статье то его пропускаем, но! Нам еще нужно отредактировать index.html. Так что исправляем вот этот код
<!--ТЕКСТ-->
<div class="div_news">
<p class="title">Введение</p>
<p>Хотел дописать свою CMS но увы дело это долгое по причине того, что постоянно придумываю что-то еще, и внедряю все новые элементы.. Боюсь что мое, так сказать, "дописывание" может никогда не закончится =) Эта небольшая статья будет содержать лишь цель моего (и Вашего) проекта. Написание статей на блоге помогает мне разобраться в написанном коде, и улучшать его. Тем самым этот цикл статей мне поможет точно, возможно он и поможет Вам. Писать будем скрипт блога. </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 09 Октября 2011 года 07:39
</div>
<div class="div_news">
<p class="title">Кнопка "Читать дальше"</p>
<p>Было время, пришлось задуматься...как же делают такой мини текст, после которого идет кнопка читать полностью... Постигая PHP с трудом верилось что это делается в ручную...На своем первом сайте я делал специальный столбец с мини текстом, и именно этот текст выводил на новостной странице, добавляя внизу кнопку "Читать дальше" Это работает, но мне кажется это как то не очень удобно... Я искал способ который бы подсчитывал символы в переменной, и обрезал, скажем после двухсот символов, переменную... Я до сих пор верю что такой способ есть, но я его не нашел =( Какое то время я пользовался таким способом: </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 03 Октября 2011 года 11:20
</div>
<!--ТЕКСТ-->
на этот
<!--ТЕКСТ-->
<?=$txt?>
<!--ТЕКСТ-->
Все, наш модуль готов...При заполнение базы данных, новости будут выводится на экран, вот скрин
update: Если после запуска Вы наблюдаете не адекватную картину в виде каракозябр, или непонятных символов в верху ( типа вот таких - п»їп»ї ), то переходите вот к этому посту "Правильная кодировка у нашего движка". Эта проблема связана с кодировкой, так что ее, просто, необходимо сменить, и все =)
![]() |
Исходник |