Отправляет email-рассылки с помощью сервиса Sendsay

Еженедельник сайтостроителя

  Все выпуски  

RSS-канал на PHP


Подшивка рассылки Обратная связь

№23 30.11.07

Привет всем. В четвертом номере мы уже рассматривали технологию RSS. Сегодня давайте подробнее остановимся на том, как можно «прикрутить» ее к сайту и заодно исправим небольшую ошибку в отправке заголовков.

В нашей программе есть несколько составляющих.
1. Новости нашего канала нужно где-то хранить. Это может быть текстовый файл или база данных.
2. Нужен скрипт (будем использовать PHP), который будет автоматически генерировать RSS-ленту из имеющихся у нас новостей. Тогда нам не придется каждый раз составлять новый rss-документ, а просто добавлять новости в файл (или БД) по средствам простой формы.
3. Сама форма – простая админ-панель для добавление новостей.

Итак, начнем с первого пункта. Если Вашему сайту хватит одного фида, то, на мой взгляд, использовать для хранения новостей базу данных не целесообразно. Для того, чтобы хранить данные в текстовом файле удобнее всего сохранять их в массив (ведь каждая новость имеет заголовок, описание), а затем запаковывать в строку с помощью функции serialize() и записывать в файл. Чтобы восстановить массив обратно из строки служит функция unserialize() (подробнее об этих функциях см. №3 «подшивки»).

Таким образом, я буду исходить из того, что мы имеем массив $file, где поле title – заголовок новости, а body – ее описание.

Вот код нашего канала


Файл rss.php

<?php
header("content-type: application/rss+xml");?>
<?="<?xml version=\"1.0\" encoding=\"windows-1251\"?>"?>
<?php

$title = "название ленты";
$opis = "описание ленты";
$url = "адрес сайта";
$name = "имя автора";
//выводитм заголовки
print '
<rss version="2.0">
<channel>
<title>'.$title.'</title>
<link>'.$url.'</link>
<description>'.$opis.'
</description>
<language>ru</language>';

$open=file_get_contents("rss.txt");//считываем файл
$file=unserialize($open);//превращаем обратно в массив

//выводим все новости из массива
foreach ($file as $item) {
print '
<item>
<title>'.$item['title'].'</title><link>'.$url.'</link>
<description>'.$item['body'].'
</description>
<author>( '.$name.')</author>
</item>';
}
?>
</channel>
</rss>

Вот и все, осталось только написать скрипт, который будет брать данные из формы (заголовок и описание новости), добавлять их в массив и записывать в файл. Выглядит он примерно так.


Файл admin.php

<?php
header ("Content-type:text/html; charset=win-1251");
print'<html><head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=win-1251\" />
<title>Админка</title>
</head><body>';

//Функции управления фидом

//Добавление новости
if (@$_REQUEST['actr'] == "addrss") {
$f = file_get_contents ("rss.txt");
if (@$_REQUEST['date'] == "1") $date =" " . date ("H:i d.m.y");//можете изменить формат
else $date = "";
if ($f == "")//если файл еще пустой
{
$st = array();
$st['0']['title'] = $_REQUEST['title'] . $date;
$st['0']['body'] = $_REQUEST['newrss'];
$st = serialize($st);
$fo = fopen ("rss.txt", "w+");
fwrite ($fo, $st);
fclose ($fo);
}
else
{
$st = unserialize ($f);
if (count($st) == 15)//если новостей уже 15
{
array_pop ($st);//убираем последнюю
}
$new = array();
$new['title'] = @$_REQUEST['title'] . $date;
$new['body'] = @$_REQUEST['newrss'];

array_unshift ($st, $new);//добавляем новость в начало массива
$st = serialize ($st);
$f = fopen ("rss.txt", "w+");//сохраняем
fwrite ($f, $st);
fclose ($f);
}
$mes = "Фид обновлен";
}

//Очистка файла
if (@$_REQUEST['actr'] == "clear") {
$f = fopen ("rss.txt", "w+");
fclose ($f);
$mes = "Файл очищен";
}

//выводим форму
print '

<FORM ACTION="admin.php" METHOD=POST NAME="new">
<INPUT TYPE="hidden" NAME="actr" VALUE="addrss">
<small>Заголовок (100 символов) :</small>
<br/>

<INPUT TYPE="text" NAME="title" MAXLENGTH="100">
<INPUT TYPE="hidden" NAME="date" VALUE="0">
<INPUT TYPE="checkbox" NAME="date" VALUE="1">добавить текущую дату (чч:мм дд.мм.гг)<br/><br/>
Текст новости (500 символов) :<br/>
<textarea name="newrss" WRAP="virtual" COLS="60" ROWS="10"></textarea><br/>
<INPUT TYPE="submit" VALUE="Добавить"><br><br>
<a href="admin.php?act=rss&actr=clear">Удалить все новости</a><br/><br/>';
echo @$mes;

?>
</body>
</html>

И еще создайте файл rss.txt. Теперь точно все. До новых встреч!
Сделай свой сайт оригинальнее вместе с Еженедельником сайтостроителя!


В избранное