Jak v PHP vytvořit jeden RSS kanál z více databázových tabulek?
- 27. Srpen 2007
- Publikováno v PHP
- Napište komentář
Tento kód vygeneruje soubor rss.xml, ve kterém bude nejčerstvějších 10 položek z různých databázových tabulek.
var $rows;
var $count=0;
function addItem($item){
$this->rows[$this->count] = $item;
$this->count++;
}
function getRow($i){
return $this->rows[$i];
}
function sort(){
usort($this->rows,"itemRssCmp");
}
}
function itemRssCmp($a,$b){
if ($a->timeStamp==$b->timeStamp) return 0;
return ($a->timeStamp> $b->timeStamp) ? -1 : 1;
}
class Itemrss{
var $title;
var $link;
var $guid;
var $description;
var $pubDate;
var $category;
var $timeStamp;
}
Vytvoříme instanci třídy Rss, do které později uložíme všechny položky.
Jednotlivé položky se načtou z databáze a uloží do instance Itemrss, tato se následně přidá do objektu rss.
while ($row = mysql_fetch_array($r)){
$item = new Itemrss();
$item->category = "Stranky";
$item->title = $row["title"];
$item->description = $row["description"];
$datum = $row["date"];
$timestamp = strtotime($date);
$item->timeStamp = $timestamp;
$item->pubDate = date("r",$timestamp);
$item->link = $row["page_url"];
$item->guid = $item->link;
$rss->addItem($item);
}
Další položky je možné přidávat z tabulky s úplně jinou strukturou:
while ($row = mysql_fetch_array($r)){
$item = new Itemrss();
$item->category = "Novinky";
$item->title = $row["title"];
$item->description = $row["text"];
$item->link = "/news.php";
$datum = $row["news_date"];
$timestamp = strtotime($datum);
$item->timeStamp = $timestamp;
$item->pubDate = date("r",$timestamp);
$rss->addItem($item);
}
Teď zbývá jen položky seřadit podle data a uložit do souboru rss.xml
$xml = "";
$xml .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$xml .= "<rss version=\"2.0\">\n";
$xml .= "<channel>\n";
$xml .= "<title>Titulek stranky</title>\n";
$xml .= "<link>http://example.cz/</link>\n";
$xml .= "<description>Popis stranek</description>\n";
$xml .= "<language>cs</language>\n";
$xml .= "<generator>Napriklad vas CMS</generator>\n";
$xml .= "<copyright>Vase Jmeno</copyright>\n";
$xml .= "<category>web</category>\n";
$xml .= "<docs>http://backend.userland.com/rss</docs>\n";
$xml .= "\n";
for ($i=0;($i<$rss->pocet && $i<10);$i++){
$xml .= "<item>\n";
$xml .= "<title>" . strip_tags($rss->gedRow($i)->title) . "</title>\n";
$xml .= "<link>" . $rss->getRow($i)->link . "</link>\n";
if (isset($rss->getRow($i)->guid)) $xml .= "<guid>" . $rss->getRow($i)->guid . "</guid>\n";
$xml .= "<description>" . strip_tags($rss->getRow($i)->description) . "</description>\n";
$xml .= "<category>" . $rss->getRow($i)->category . "</category>\n";
$xml .= "<pubDate>" . $rss->getRow($i)->pubDate . "</pubDate>";
$xml .= "</item>\n";
}
$xml .= "</channel>\n";
$xml .= "</rss>\n";
if (!$handle = fopen("rss.xml", 'w')) {
echo "Soubor nelze otevrit!";
exit;
}
if (fwrite($handle, $xml) === FALSE) {
echo "Soubor nelze ulozit!";
exit;
}
fclose($handle);
Dosud žádný komentář.