[h1]Создание RSS-ленты новостей[/h1]
Формат RSS фактически является XML-форматом, а значит мы можем использовать возможности расширения DOM для создания RSS-ленты. Приведенный ниже код расширяет класс DOMDocument, чтобы построить дерево DOM, создавая элементы и добавляя их в соответствующую структуру.
<?php
class rss2 extends DOMDocument {
private $channel;
public function __construct($title, $link, $description) {
parent::__construct();
$this->formatOutput = true;
$root = $this->appendChild($this->createElement('rss'));
$root->setAttribute('version', '2.0');
$channel = $root->appendChild($this->createElement('channel'));
$channel->appendChild($this->createElement('title', $title));
$channel->appendChild($this->createElement('link', $link));
$channel->appendChild($this->createElement('description', $description));
$this->channel = $channel;
}
public function addItem($title, $link, $description) {
$item = $this->createElement('item');
$item->appendChild($this->createElement('title', $title));
$item->appendChild($this->createElement('link', $link));
$item->appendChild($this->createElement('description', $description));
$this->channel->appendChild($item);
}
}
?> |
Конструктор класса создает и инициализирует элементы
и . Он принимает три аргумента: название канала, ссылку и описание. Конструктор вызывает метод parent::__construct(), что фактически приводит к вызову метода DOMDocument::__construct(). После этого можно приступать к построению документа.
Сперва устанавливаем атрибут formatOutput в значение true. В вывод будут добавлены отступы и символы перевода строки, так что его будет легче читать.
Затем создаем корневой элемент документа, т.е rss, и устанавливаем атрибут version в значение 2.0, потому как мы строим ленту новостей формата RSS 2.0.
Все данные будут находиться внутри элемента channel под узлом rss, поэтому следующий шаг - создание этого элемента и инициализации его элементов-потомков title, link и description.
Все эти данные берутся из аргументов, переданных конструктору. Они создаются методом CreateElement(), который позволяет указать как имя элемента, так и текстовой узел за один вызов.
Наконец, сохраняем элемент channel, чтобы упростить обращение к нему в дальнейшем.
Для добавления новых статей предназначен метод addItem(). Поскольку элементы item содержат те же данные, что и channel, код метода addItem() почти идентичен коду конструктора.
Пример использования класса:
<?php
$dblocation = 'localhost'; // Имя сервера
$dbuser = 'root'; // Имя пользователя
$dbpswrd = '123'; // Пароль
$dbname = 'mydb'; // Имя базы данных
// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );
mysql_query( 'SET NAMES UTF8' );
// Выбираем базу данных
mysql_select_db( $dbname, $dblink );
$rss = new rss2('Новости по чем-то там', 'http://sec-news.ru',
'Новости по чем-то там, тому сему и этому');
$query = 'SELECT id, title, announce
FROM news
ORDER BY puttime DESC
LIMIT 10';
$res = mysql_query( $query );
while( $news = mysql_fetch_array( $res ) ) {
$rss->addItem($news['title'], 'http://sec-news.ru/news/'.$news['id'].'/', $news['announce']);
}
echo $rss->saveXML();
?>
|
Есть один минус в кодировках. Если у вас кодировка сайта в CP-1251, то вам нужно каждый раз перекодировать кодировку. Это из-за того, что РСС кодировка - UTF.
Источник: http://blog.webmasterschool.ru/archives/172
НО! Лично я использую другой вариантик... Смотрите "Создание RSS ленты на своем сайте"