Ganbox.com предоставя безплатно един PHP клас за бързо създаване на динамична RSS емисия с новини, които се извличат от базата данни на твой сайт.
Целта при написването на този клас е:
1. Да се използва лесно и удобно с кратък запис. Има включен пример в кода.
2. Да се валидира XML кода на RSS-а от валидатора http://feedvalidator.org
3. Да няма проблем с кирилицата, включително URL адреси на кирилица.
4. Да работи и на по-старата PHP версия 4, за да може да се ползва на по-стари сайтове.
Софтуерът се предлага безплатно под лиценза Creative Commons 3.0 - http://creativecommons.org/licenses/by/3.0/deed.bg
Създаване на RSS емисия с PHP
За този пример ще предположим, че на твоя сайт sait.com имаш новини, които стоят в база данни в таблица с име news. Таблицата има следните полета: id - номер на новина; title - заглавие на новина; body - текст на новината; date - дата на създаване. Предполага се още, че URL адресите на всяка новина имат следния вид: http://sait.com/news.php?id=2 и вече има направена връзка към базата данни във файл db.php.
Изтегли файла Ganbox.com RSS Feed Generator и го разархивирай. Ще получиш файла class.rss_feed.php. Може да го поставиш в главната уеб директория на сайта. Там създай файла feed.php, който ще генерира твоя RSS и ще има следното съдържание:
include("class.rss_feed.php"); // включва класа за RSS include("db.php"); // връзка с базата данни $feed = new RSSFeed(); // създава обект $feed->init( 'RSS на sait.com', // Заглавие на RSS емисия 'http://sait.com/feed.php', // URL адрес на RSS емисия 'RSS с новините на сайт sait.com' // Описание на емисията ,'utf-8' // Енкодинг на емисията (по подразбиране е utf-8 и може да се изтрие този ред) ); $news=get_last_news(10); // връща последните 10 новини foreach($news as $one){ //Добавяне на една публикация $item = new Item(); $item->setItemTitle($one['title']); $one_url = 'http://sait.com/news.php?id='.$one['id']; // URL адрес на новината $item->setItemLink($one_url); // URL адрес на публикация $item->setItemDate($one['date']); // дата на публикация, формат YYYY-MM-DD HH:MM:SS $item->setItemDesc($one['body']); $feed->addItem($item); } $feed->createFeed(); // създава и отпечатва целия XML на RSS-а // Примерна функция за извличане на последните count новини function get_last_news($count=1) { $ret = array(); $query = "SELECT * FROM news ORDER BY id DESC LIMIT $count"; $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows){ while($row = mysql_fetch_assoc($result)){ $ret[] = $row; } } return $ret; }
Ако новините в базата данни не са в енкодинг utf-8 и има проблем с кирилицата опитай следното:
1. Промени четвъртия параметър на функция init() от 'utf-8' на 'cp1251'.
2. Увери се, че файла feed.php има енкодинг cp1251.
За добавяне на лого към RSS емисията, след извикването на init() преди реда с get_last_news() постави:
$rss_title = 'RSS на sait.com'; // трябва да съвпада със заглавието на RSS-а $rss_url = 'http://sait.com/feed.php'; // трябва да съвпада с URL адреса на RSS-а $img_url = 'http://sait.com/logo.png'; // URL адрес на логото (приема само JPG, GIF и PNG) $img_width = 100; // ширина на логото в пиксели $img_height = 100; // височина на логото $feed->setFeedImage($rss_title, $img_url, $rss_url, $img_width, $img_height);
Също така, когато това е необходимо, класа прави много лесно добавянето на прикачен файл към публикация с таг enclosure, като сам пресмята размера на файла и определя типа на файла.
Разбира се освен за новини кода може да се ползва и за създаване на емисия с последните продукти на електронен магазин, който да даде възможност на потребителите да се абонират.
След като създадеш своите RSS канали, е добра идея да се прекарат през Google Feedburner и след това да се постави линк в началната страница на сайта към тях. Ако имаш нужда от помощ със създаването на твоите RSS емисии, както и по-нататъшното им ползване за SEO цели, може да се свържеш с нас.
Кодът е изпробван под PHP версии 4 и 5. Също така има работещо копие на класа на силно посещаван сайт.
За всякакви коментари по кода пиши в тази тема.
Благодаря за страхотния код. Използвам го, за да генерирам RSS емисията в блога си. Всичко работи без проблеми. Оказа се, че датабазата, която съм създал не е с най-ефикасната архитектура, но с малки промени успях да настроя кода съобразно това.
Продължавайте все така с добрата работа. Успех!
Сега попаднах на този код. Тествах го и работи страхотно. Браво!
Добре е да се постави htmlspecialchars за setItemTitle в class.rss_feed.php
Нещо подобно:
function setItemTitle($title) {
$this->setItemElement('title', htmlspecialchars($title));
}
Браво за кода, много добре е направен.