Генератор RSS ленты для нашего блога

 

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

 

 

Цель

 

Для начала я как обычно объявлю цели на сегодня.

  • Нам понадобится новая колонка в таблице blog, нашей базы данных. Колонка будет содержать цифру от нуля до единицы. Я надеюсь Вы уже догадались для чего это. Ноль будет означать что анонс на пост не будет транслироваться в RSS ленте. Единица же наоборот позволит нам занести пару строк о новом посте в наш RSS канал
  • Обработчик добавление постов должен содержать информацию, по умолчанию, для новой колонки
  • Создадим нужную нам функцию

 

Предисловие

 

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

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

 

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

 

Прежде чем я начну, хочу показать Вам код, который будет создавать наша функция

<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>Блог RS - Все относительно просто</title>
<link>http://rsblog.ru/</link>
<description>Блог Глумова Алексея aka Rio-Shaman. Делюсь с Вами мыслями о разработки сайтов с нуля. Публикую уроки разработки своей CMS, так же просто статьи посвященные улучшению своих проектов. Скрипты на php, javascript. Я постараюсь оптимально просто и наглядно объяснить Вам работу простейший cms на php</description>
<language>ru-ru</language>
<item>

<title>Генератор карты сайта - Sitemap.xml</title>
<link>http://rsblog.ru/index.php?blog=107</link>
<description>Все привет! Добро пожаловать на Блог RS! Так как мы не можем реализовать новый пункт для станицы настроек постов, пока отсутствую такие элементы как генератор карты сайта, то есть файла sitemap.xml, и генератора RSS ленты, то есть файла rss.xml, то сегодня нам придется отвлечься от листа настроек, и написать один из нужных нам генераторов. Как Вы могли понять из заголовка поста, сегодня нам предстоит реализация генератора sitemap.</description>
<pubDate>Thu, 16 Feb 2012 17:18:01 GMT</pubDate>
</item>
<item>
<title>Убираем модуль комментариев из нужных постов</title>

<link>http://rsblog.ru/index.php?blog=106</link>
<description>Всем привет! Добро пожаловать на Блог RS! Сегодня мы продолжим наполнять наш список настроек новым функционалом. У меня по плану ввести настройку позволяющую запретить, или на оборот, разрешить писать комментарии в определенных постах. По умолчанию модуль комментариев будет включен, но при необходимости, администратор блога, может запретить данный функционал</description>
<pubDate>Mon, 13 Feb 2012 14:32:01 GMT</pubDate>
</item>
<item>
<title>Убираем выбранные посты с главной страницы</title>
<link>http://rsblog.ru/index.php?blog=104</link>
<description>Всем привет! Добро пожаловать на Блог RS! Сегодня мы продолжим создавать блог с нуля, а именно, начнем линейку постов, которую я посвящу реализации списка настроек для нашего контента. Как видно из заголовка поста, сегодня в списке настроек появится, пока что один, пункт, который позволит нам спрятать анонс поста с главной страницы. Для чего это нужно?</description>
<pubDate>Fri, 10 Feb 2012 15:25:01 GMT</pubDate>
</item>
<item>
<title>Баги блога</title>
<link>http://rsblog.ru/index.php?blog=103</link>
<description>Приветствую Вас! В связи с тем, что блог написан на самописном движке, то некоторые модули нуждаются в тестах, и могут работать не так как надо. Я, в этом посте, собираюсь описывать найденные мной ошибки, и информировать Вас о результатах работы над этими ошибками</description>
<pubDate>Tue, 07 Feb 2012 14:02:01 GMT</pubDate>
</item>
<item>
<title>Логотип для нашего блога</title>
<link>http://rsblog.ru/index.php?blog=102</link>
<description>Всем привет! Добро пожаловать на Блог RS! Сегодня мне очень, очень лень писать какие либо коды, именно поэтому решил накидать небольшой графический урок, что бы у Вас не сложилось впечатление, что я забросил блог! Рисовать сегодня будем логотип для нашего блога, но пост я размещу не в категории &quot;создание блога с нуля&quot;, а в категории &quot;графика&quot;. Логотип, к сожалению, вещь индивидуальная, и нельзя вот так создать пошаговую инструкцию правильного и красивого изображения. Но глядя на чужие изображения вполне может родится отличная идея, поэтому я представлю свою не замысловатую работу, в надежде, разбудить у Вас вдохновение...</description>
<pubDate>Tue, 07 Feb 2012 11:42:01 GMT</pubDate>
</item>
</channel>
</rss>

xml код идет по стандарту RSS 2.0. О синтаксисе можете почитать в интернете!

Приступим к созданию базы данных. Заходим в нашу таблицу blog. Щелкаем по кнопке "Структуры" выбираем "После xmlsm" и жмем "ОК"

Заполняем поле следующим образом и жмем "Сохранить"

Далее в ручную поставьте, во всех постах, что у Вас есть в БД, единицу в новое поле.

 

Обработчик добавление постов

 

Вот код. Думаю объяснять не стоит что да как...я это уже говорил в предыдущих постах ( например тут )

    //ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b,cat,meta_d,meta_k,viewindex,viewcomm,sm,xmlsm,rss)
VALUES ('$txt_post','$name_post','$author_post','$date_cont','$menu_post','$metad_post','$metak_post','0','1','0','monthly|0.2','0')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ

 

Функция RSS генератора

 

Вот код с комментариями. Я этот файл назвал rss.php поместил, временно, в админские модули

<?
$nameDB = "rsblog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));


if(isset($_GET["server_root"])){$server_root = $_GET["server_root"];unset($server_root);}
if(isset($_POST["server_root"])){$server_root = $_POST["server_root"];unset($server_root);}

$server_root = "http://rsblog.ru/";

function rss($site)
{
$rssHEADER = mysql_query("SELECT * FROM page WHERE id='1'");//Вытаскиваем инфу о сайте
$myrowHEADER = mysql_fetch_array($rssHEADER);

//формируем шапку
$header = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n<rss version=\"2.0\">\n\t<channel>\n\t\t<title>".$myrowHEADER[title]."</title>\n\t\t<link>".$site."</link>\n\t\t<description>".$myrowHEADER[meta_d]."</description>\n\t\t<language>ru-ru</language>\n";//Шапка xml документа

$rssRESULT = mysql_query("SELECT id,date_b,title,text FROM blog WHERE rss='1' ORDER BY id DESC LIMIT 5");//Вытаскиваем 5 постов из БД
$myrow = mysql_fetch_array($rssRESULT);

if($myrow != "")//если есть посты которые нужно поместить в rss ленту
{
do
{
//приобразуем дату из БД в вид ГГГГ-ММ-ДД ( у нас в БД вот такой вид ДД/ММ/ГГГГ ЧЧ:ММ )
$datePOST = explode(" ",$myrow[date_b]);//делим дату на массив. В первом элементе массива будет ДД/ММ/ГГГГ а во втором ЧЧ:ММ
$dateMS = $datePOST[1];//сохраняем минуты и сек в отдельной переменной
$datePOST = explode("/",$datePOST[0]);//Делим первый элемент массива на другой массив. В новом массиве будет 3 элемента. Первый содержит ДД, второй ММ и третий ГГГГ
$dateUNIX = strtotime($datePOST[0]."-".$datePOST[1]."-".$datePOST[2]);//Формируем дату в виде ДД-ММ-ГГГГ после чего превращаем ее в целое число
$datePOST = date("D, d M Y ",$dateUNIX);//превращаем дату в вид Thu, 16 Feb 2012 (пример)
$datePOST = $datePOST.$dateMS.":01 GMT";//пристыковываем к дате еще и время (пример Thu, 16 Feb 2012 04:43:01 GMT)

$link = $site."index.php?blog=".$myrow[id];//генерируем ссылку
$txt = explode("<p>[end]</p>",$myrow[text]);//отделяем анонс от текста поста
$txt = strip_tags($txt[0]);//чистим анонс от html кода

//генерируем xml код
$xmlcode .= "\t\t<item>\n\t\t\t<title>".$myrow[title]."</title>\n\t\t\t<link>".$link."</link>\n\t\t\t<description>".$txt."</description>\n\t\t\t<pubDate>".$datePOST."</pubDate>\n\t\t</item>\n";
}
while($myrow = mysql_fetch_array($rssRESULT));

$end = "\t</channel>\n</rss>";//закрываем теги xml документа
$result = $header.$xmlcode.$end;//склеиваем части xml кода

$rssFILE = fopen("../../rss/rss.xml", "w+");//открываем файл rss ленты
fwrite($rssFILE,$result);//записываем в него полученный xml код
fclose($rssFILE);//закрываем rss ленту
}
}

rss($server_root);
?>

Прежде чем, что ли бо пояснять, создайте в корне нашего блога папку rss

Первое, что Вы увидите в коде, это временное подключение к базе данных. Далее мы вытаскиваем из базы данных заголовок, описание и ключевые слова сайта. Эта информация пригодится нам для формирование шапки нашего RSS файла.

Формируем шапку в пеерменной header. В ней будет содержаться примерно вот такой текст

<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>Блог RS - Все относительно просто</title>
<link>http://rsblog.ru/</link>
<description>Блог Глумова Алексея aka Rio-Shaman. Делюсь с Вами мыслями о разработки сайтов с нуля. Публикую уроки разработки своей CMS, так же просто статьи посвященные улучшению своих проектов. Скрипты на php, javascript. Я постараюсь оптимально просто и наглядно объяснить Вам работу простейший cms на php</description>
<language>ru-ru</language>


Далее мы выводим из базы данных информацию о последних пяти постах. При этом выводятся только те посты в которых колонка rss равна единице

После проверки на наличие постов в переменной myrow запускается цикл do while. Первые строчки в цикле позволяют из даты вида 16/02/2012 04:43 создать дату вида Thu, 16 Feb 2012 04:43:01 GMT. Посмотрите на код повнимательней, там все очень даже просто

После создается ссылка на пост, заносится в переменную link. Так же создается анонс путем разделения полноценного текста разделителем [end]. То же самое мы делали при реализации новостей на блоге.

Далее генерируется примерно вот такой код

        <item>
<title>Генератор карты сайта - Sitemap.xml</title>
<link>http://rsblog.ru/index.php?blog=107</link>
<description>Все привет! Добро пожаловать на Блог RS! Так как мы не можем реализовать новый пункт для станицы настроек постов, пока отсутствую такие элементы как генератор карты сайта, то есть файла sitemap.xml, и генератора RSS ленты, то есть файла rss.xml, то сегодня нам придется отвлечься от листа настроек, и написать один из нужных нам генераторов. Как Вы могли понять из заголовка поста, сегодня нам предстоит реализация генератора sitemap.</description>
<pubDate>Thu, 16 Feb 2012 17:18:01 GMT</pubDate>
</item>

В конце, вся с генерированная информация формируется в одну переменную result, и записывается в файл rss.xml который будет лежать в папке rss в корне нашего блога.

 

Заключение

 

Ну что ж, мы написали функцию генерации rss файла, останется только прикрутить ее к нашей админки, чем мы займемся в следующем посте, так что не "переключайтесь" и подпишитесь на RSS ленту блога через ридер, или же по почте.

Если есть какие вопросы, или просто есть что сказать, пользуйтесь формой ниже.

Всего Вам наилучшего! У меня все!

Исходник

______

P.S.: Вы знаете какими бывают принтеры? Я вот например удивился увидев здесь термотрансферные принтеры для печати этикеток. Не знал что такие бывают Кстати, на этом сайте проводится акция по которой Вы можете получить 10% скидку!

 

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

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Татьяна, 25 Февраля 2012 г. 17:09 пишет:
Гость
Мне бы ещё узнать как выглядит адрес RSS фида , что бы его добавлять (адрес фида) в некоторые каталоги сайтов.
Rio-Shaman, 25 Февраля 2012 г. 17:16 пишет:
Автор
Вы сейчас спрашиваете о именно вашем адресе rss файла, или о адресе проекта который я описываю?
Ответ для пользователя: Татьяна
Виктор, 16 Февраля 2014 г. 07:39 пишет:
Гость
У меня с кодировкой проблемы какие то, везде стоит utf8 а на странице с rss все равно кракозябры, в чем может быть дело?
Алексей, 16 Февраля 2014 г. 14:11 пишет:
Автор
На каком сервере тестируете? Денвер?
Ответ для пользователя: Виктор