hoi,
ik ben net klaar met een rss feed maker.
maar nou zit ik met de volgende vraag:
als je aan php hebt verteld, dat het een xml document is (header("Content-Type: application/xml; charset=UTF-8");)
parset php het bestand dan?
doet ie dat dan?
zou wel fijn zijn anders kan ik de hele zooi weer gaan omgooien:(
volgens mij bedoel je niet wat fangorn zegt? kun je misschien iets duidelijker uitleggen wat je wilt??
Thomas - 08/05/2005 14:32 (laatste wijziging 08/05/2005 14:32)
Moderator
Je gebruikt toch een PHP-bestand om die XML-file te maken neem ik aan ?
Het is ofwel .xml ofwel .php. XML is geen PHP, en het zal dus ook niet als zodanig behandeld worden.
Ik gebruik een template (en TemplatePower) om XML-bestanden te maken / vullen. Werkt prima.
Ow ik liet het bestand van de RSS uit zichzelf vullen, dus rss.xml was een php bestand dat een bepaalde output levert. Kan dat dus niet?
Kan iemand anders een voorbeeld geven hoe het wel kan?:s
Dat kan wel, maar dat lijkt mij niet de bedoeling. Als je het XML-bestand (PHP-bestand dus) aanspreekt, wordt dus elke keer de database ge-queried en het XML-bestand gevuld right ?
Je kan het XML-bestand toch ook aanpassen elke keer dat er daadwerkelijk iets verandert ? Dat lijkt mij véél efficienter (de database wordt niet belast, er wordt "platte tekst" uitgelezen die verder niet geparsed hoeft te worden).
Winst in alle opzichten.
RSS-feeds die de extensie .php hebben zijn IMO per definitie suf .
Thomas - 08/05/2005 14:46 (laatste wijziging 08/05/2005 14:49)
Moderator
Nou jah, ik gebruik daar een template voor, zodat je alleen die dingen in hoeft te vullen die telkens veranderen. Ik weet niet of je ervaring hebt met TemplatePower ?
In plaats van de content af te drukken naar het scherm (dit is normaal altijd de laatste stap bij TemplatePower) schrijf je deze weg naar een bestand:
// de template is nu gevuld - maak het bestand
$file = $base."/rss/xml/".$rubriek.".xml";
if(!($handle = fopen($file, "wb"))) {
// debug
// die("kon file niet maken");
} else {
fwrite($handle, $tpl->getOutputContent());
fclose($handle);
chmod($file, 0644);
}
<?
header("Content-Type: application/xml; charset=UTF-8"); // We moeten PHP natuurlijk wel vertellen, dat het gaat om een XML bestand
include("config.php"); // dit includen, om naar database te connecteren!
?>
<rss version="2.0"> <!-- RSS versie --->
<channel> <!-- Begin het kanaal --->
<title>uwdomein.xxx Rss feed</title> <!-- Titel van de feed --->
<link>http://www.uwdomein.xxx</link> <!-- Link naar de homepage van jouw website --->
<description>Beschrijving</description> <!-- stel hier beschrijving in van feed --->
<language>nl</language> <!-- stel hier je taal in van de feed --->
<webmaster>webmaster@jouwdomein.xxx</webmaster> <!-- email van de webmaster --->
<?
$rquery = mysql_query("SELECT * FROM tutorials ORDER BY id DESC LIMIT 5"); // query om laatste 5 tutorials op te halen, verander tutorials in bijv. nieuws, of een andere tabelnaam, om de laatste 5 items van die tabel op te halen!
while($fetch = mysql_fetch_assoc($rquery)) {
if(DB::isError($fetch) die($fetch->getMessage()); // if there is an error, display it
$tutorial = stripslashes($fetch['tutorial']); // execute stripslashes
$tutorial = substr($tutorial, 0, 40); // alleen eerste 40 tekens bij beschrijving
echo "<item><title>".$fetch['titel']."</title><link>http://www.yourdomain.xxx/tutorials.php?id=".$show['id']."</link><description>". substr($fetch['tutorial'],0,25) ."...</description><author>". $fetch['auteur'] ."</author><pubDate>". $fetch['datumtijd'] ."</pubDate></item>"; // de hele echo, spreekt voorzich
}
?>
</channel></rss>
<?
header("Content-Type: application/xml; charset=UTF-8");// We moeten PHP natuurlijk wel vertellen, dat het gaat om een XML bestand
include("config.php");// dit includen, om naar database te connecteren!
?>
<rss version="2.0"> <!-- RSS versie --->
<channel> <!-- Begin het kanaal --->
<title>uwdomein.xxx Rss feed</title> <!-- Titel van de feed --->
<link>http://www.uwdomein.xxx</link> <!-- Link naar de homepage van jouw website --->
<description>Beschrijving</description> <!-- stel hier beschrijving in van feed --->
<language>nl</language> <!-- stel hier je taal in van de feed --->
<webmaster>webmaster@jouwdomein.xxx</webmaster> <!-- email van de webmaster --->
<?
$rquery=mysql_query("SELECT * FROM tutorials ORDER BY id DESC LIMIT 5");// query om laatste 5 tutorials op te halen, verander tutorials in bijv. nieuws, of een andere tabelnaam, om de laatste 5 items van die tabel op te halen!
$tutorial=substr($tutorial,0,40);// alleen eerste 40 tekens bij beschrijving
echo"<item><title>".$fetch['titel']."</title><link>http://www.yourdomain.xxx/tutorials.php?id=".$show['id']."</link><description>".substr($fetch['tutorial'],0,25)."...</description><author>".$fetch['auteur']."</author><pubDate>".$fetch['datumtijd']."</pubDate></item>";// de hele echo, spreekt voorzich
}
?>
</channel></rss>
Vragen
------
1.En snap dus nu even niet meer, hoe ik het moet aanpassen. Enig idee?
2. In welk bestand moet [fragment] staan en waar moet het RSS bestand nou staan.
------
Als ik het dus goed begrijp, is er sprake van 3 bestanden?
1.rss.tpl
2.filler.php
3.rss.xml
?
Thomas - 08/05/2005 15:04 (laatste wijziging 08/05/2005 15:05)
Moderator
Jep, je maakt dus een script filler.php, waarin functies staan die gebruik maken van templatepower, waarmee je de RSS-template kunt vullen en waarmee je XML-bestanden kunt aanmaken.
De functies in filler.php waarmee je een XML-bestand kunt maken/updaten roep je bijvoorbeeld aan nadat je een nieuw nieuwsitem hebt gepost (of een bestaand nieuwsitem hebt ge-edit).
De bijbehorende XML-file (nieuws.xml) wordt dan aangemaakt / geupdate.
Je past dus alleen het XML-bestand aan als er iets verandert (aangepast nieuwsitem, nieuw nieuwsitem).
Dus als ik het goed snap:
1.je post nieuws
2.filler.php wordt aangeroepen, en haalt de 5 nieuwste items op, en zet die via templatepower in het RSS bestand.
3.rss.xml is gereed.
ZO??
Zo gebeurt het ook op sitemasters - wanneer er een script/nieuwsitem/tutorial of download wordt aangemaakt / geupdate hoef je enkel het volgende te doen:
// item is hierboven ergens aangemaakt/geupdate
include("rss_functionaliteit.php");
maak_rss("nieuws", 10);
// waarbij nieuws de rubriek is waarvoor een XML-bestand
// gemaakt/overschreven moet worden, en 10 het aantal
// items dat in het XML-bestand dient te komen staan
// item is hierboven ergens aangemaakt/geupdate
include("rss_functionaliteit.php");
maak_rss("nieuws",10);
// waarbij nieuws de rubriek is waarvoor een XML-bestand
// gemaakt/overschreven moet worden, en 10 het aantal
// items dat in het XML-bestand dient te komen staan
Ah jah.
Ik snap het nu helemaal, heel erg bedankt voor de hulp.
Was eigenlijk met een script voor SM hier bezig, maar ik denk dat er heel veel gaan klagen als er dus eerst mensen me helpen en ik het dan post.
Nog 1 vraagje:
die 1e param van maak_rss(), is dat dus de categorie waar hij het inzet?
- welke query binnen de functie uitgevoerd gaat worden (om de juiste gegevens voor die rubriek te verzamelen)
- hoe de gegevens in je XML-template worden gezet (sommige rubrieken verschillen qua invulling van de template)
- de naam van het te genereren XML-bestand