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

PHP без проблем

  Все выпуски  

PHP без проблем: RSS-канал SP1


12.06.08

RSS-канал. SP1

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

Подведем итог, нам нужна функция, которая каждый раз при вызове будет перезаписывать файл RSS-канала и при этом мы должны иметь возможность задавать функции такие параметры как

  • таблица с новостями
  • поле с заголовками новостей
  • поле с описаниями новостей
  • название нашего фида

Зачем нам нужно каждый раз задавать название файла? Это даст нам возможность создавать не один, а сколько угодно каналов на сайте, например, для новостей один, для обновлений в статьях другой и т.д. И все они будут автоматически обновляться при добавлении в панели управления нового контента.
Итак, наша функция будет выглядеть примерно так:

Файл func.php

<?php

function export_rss ($table, $rss_title, $rss_body, $rss_name) {
$url="http://sait"; //URL сайта
$title="Название"; //Название сайта
$name="Автор"; //Автор
$opis="Описание"; //Описание сайта

$db_user = "root"; //логин бд
$db_passw = ""; //пароль бд
$db_host = "localhost"; //хост бд
$db_name = "joomla"; //название Вашей бд
$db_sort = "id"; //Поле, по которому производится сортировка

//подключаемся к БД

mysql_connect($db_host, $db_user, $db_passw)
or die(mysql_error());
mysql_query('CREATE DATABASE '.$db_name.'');
mysql_select_db($db_name)
or die(mysql_error());

$rdb = mysql_query('SELECT * FROM '.$table.' ORDER BY '.$db_sort.'') or die(mysql_error());

// Получаем результат в массив $data.
for ($data=array(); $row=mysql_fetch_assoc($rdb); $data[]=$row);

//Формируем канал. Заголовки
$rss_head = '<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>'.$title.'</title>
<link>'.$url.'</link>
<description>'.$opis.'
</description>
<language>ru</language>';

//Новости
$rss_list = array ();

//перебираем все новости
foreach ($data as $item) {
$rss_list[] = '
<item>
<title>'.$item[$rss_title].'</title><link>'.$url.'</link>
<description>'.htmlspecialchars($item[$rss_body]).'</description>
<author>( '.$name.')</author>
</item>';
}

//переворачиваем массив, чтобы более новые записи оказались вверху
$rss_list = array_reverse ($rss_list);
//Возьмем первые 15
if (count($rss_list) > 15) $rss_list = array_slice ($rss_list, 0, 15);
//делаем из массива строку
$rss_body = implode ("\r\n", $rss_list);
//конец
$rss_end = '</channel></rss>';
//Склеиваем все вместе
$rss = $rss_head.$rss_body.$rss_end;
//и записываем в файл
$nrss = fopen ($rss_name, "w");
fwrite ($nrss, $rss);
fclose ($nrss);
}

?>

Для использования функции export_rss () нужно задать ей несколько параметров.

  • $table – таблица с новостями
  • $rss_title – поле заголовков
  • $rss_body – поле описаний новостей
  • $rss_name – название канала

Я попробовал экспортировать новости из таблицы новостей Joomla.

Файл test.php
<?php
//Пример экспорта новостей из таблицы

require_once("func.php");//подключаем файл с нашей функцией
export_rss ("jos_content", "title", "introtext", "test_feed.rss")//и вызываем ее
?>

Результатом был новый файл test_feed.rss. При желании, конечно, можно использовать абсолютные пути при создании нового файла и подключении функции.

Как всегда жду вопросов и комментариев в блоге (ссылка вверху, справа). Удачи!

Поиск в интернет-магазине Bolero


В избранное