Eigenen RSS Feed erstellen - neues Modul
Hi!
Ein wirklich super Modul und genau da, was ich brauche.
Aber ich habe 2 Probleme, eine Frage und einen Wunsch:
1. Problem:
http://www.tkkg-site.de/cms/front_conte ... &idart=590
Habe auch das Problem mit den Titeln.
2. Problem:
Wie erreiche ich es, dass auf allen Seiten von www.tkkg-site.de im Mozilla Firefox das RSS Symbol unten auftaucht und mit einem Klick darauf der Feed gespeichert werden kann?
Wunsch:
Können die News nicht irgendwie nach Datum sortiert werden? So ist es unpraktisch!
Frage:
Wie schaffe ich ein ordentliches Design bei den Feeds? So sieht das ja grauenvoll aus!
Oder machen das die Programme normalerweise selber automatisch?
Feed OWS RSS , RDF und Atom Reaer tut es jedenfalls nicht.
Danke für alles und auch für das Modul!
Ein wirklich super Modul und genau da, was ich brauche.
Aber ich habe 2 Probleme, eine Frage und einen Wunsch:
1. Problem:
http://www.tkkg-site.de/cms/front_conte ... &idart=590
Habe auch das Problem mit den Titeln.
2. Problem:
Wie erreiche ich es, dass auf allen Seiten von www.tkkg-site.de im Mozilla Firefox das RSS Symbol unten auftaucht und mit einem Klick darauf der Feed gespeichert werden kann?
Wunsch:
Können die News nicht irgendwie nach Datum sortiert werden? So ist es unpraktisch!
Frage:
Wie schaffe ich ein ordentliches Design bei den Feeds? So sieht das ja grauenvoll aus!
Oder machen das die Programme normalerweise selber automatisch?
Feed OWS RSS , RDF und Atom Reaer tut es jedenfalls nicht.
Danke für alles und auch für das Modul!
Ich hab die Probleme 1 gelöst.
1. Hochladen der rss10.inc nach cms
(http://cvs.berlios.de/cgi-bin/viewcvs.c ... a/#dirlist)
2. Anpassen des output:
Das Problem 2 löst du so:
Füge in den Head des entsprechenden Layouts dies ein
<link rel="alternate" type="application/rss+xml" title="WBG RSS" href="http://xxxx">
Statt xxx natürlich die Adresse deines XML Textes
Funktionier bei mir astrein in Firefox, Feedowl, Feeddemon, Feadreader
mit SAUBEREM Output
Außerdem gibts noch ein paar mehr Variablen sie Email und Creator usw... Könnte man noch mit in den Input aufnehmen.
1. Hochladen der rss10.inc nach cms
(http://cvs.berlios.de/cgi-bin/viewcvs.c ... a/#dirlist)
2. Anpassen des output:
Code: Alles auswählen
<?php
include("rss10.inc");
//Variablen reinholen
// selected category
$selcat = "CMS_VALUE[0]";
if($selcat!="0" && $selcat!="")
{
$rss_titel = "CMS_VALUE[1]";
$rss_link = "CMS_VALUE[2]";
$rss_description = "CMS_VALUE[3]";
$rss_copyright = "CMS_VALUE[4]";
$rss_image_url = "CMS_VALUE[5]";
$rss_image_title = "CMS_VALUE[6]";
$rss_image_link = "CMS_VALUE[7]";
// Ausgabe des Feed Titels
//$rss=new RSSWriter("http://www.gesamtschule-kerpen.de/", "Die schönste Schule der Welt",
$rss=new RSSWriter( $rss_link,
$rss_titel,
$rss_description,
array("dc:publisher" => "WBG Team",
"dc:creator" => "dummy <dummy@dummy.de>"));
// setzen des Bildes
$rss->setImage($rss_image_url,
$rss_image_title );
///////////////// Feed Artikel einfügen
/*
////Minimal Variante nur Link und Titel
$rss->addItem("http://www.example.org/page1.html",
"First Example Page");
*/
//////////////////////////////////////////////////////////////////////////////////////////////////// Datenbankabfrage
// select all articles in category widthout start article
$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
$cfg["tab"]["art_lang"]." AS ARTLANG ".
"WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
"ARTLANG.online = '1' ORDER BY ARTLANG.artsort";
// execute query
$db->query($query);
unset($articleID);
unset($linkID);
// get id's of sub articles
while ($db->next_record()) {
$articleID[] = $db->f("idartlang");
$linkID[] = $db->f("idart");
} // end while
// loop through subarticles
if (is_array($articleID)) {
foreach ($articleID as $key => $value) {
// select headline
$sql = "SELECT value FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";
$db->query($sql);
$db->next_record();
$head = urldecode($db->f("value"));
// select subheadline
$sql = "SELECT value FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '2'";
$db->query($sql);
$db->next_record();
$description = urldecode($db->f("value"));
// link
$link = $rss_link."front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]";
//&m=$m&s=$s";
///////////// RSS item schaffen, erweiterte Variante aus RSSwriter inklusive Deskription //////////////////
$rss->addItem($link,
$head,
array("description" => $description,
"dc:subject" => "Neues",
"dc:creator" => "Redaktion <redaktion@gesamtschule-kerpen.de>"));
////////////////////////////////////////////////////////////////////////////////////////////////
} // end foreach
unset($head);
unset($description);
} // end if (is_array)
/*print '</channel></rss>';*/
//////////////////////////////////////////////////////////////////////// Datenbankabfrage Ende
/*
//// erweiterte Variante inklusive Deskription
$rss->addItem("http://www.example.org/page2.html",
"Second Example Page",
array("description" => "This is the second page of examples on this wonderful site",
"dc:subject" => "examples",
"dc:creator" => "Fred <fred@example.org>"));
*/
//feed absetzen
$rss->serialize();
} //endif von if selcat
?>
Das Problem 2 löst du so:
Füge in den Head des entsprechenden Layouts dies ein
<link rel="alternate" type="application/rss+xml" title="WBG RSS" href="http://xxxx">
Statt xxx natürlich die Adresse deines XML Textes
Funktionier bei mir astrein in Firefox, Feedowl, Feeddemon, Feadreader
mit SAUBEREM Output
Außerdem gibts noch ein paar mehr Variablen sie Email und Creator usw... Könnte man noch mit in den Input aufnehmen.
Gruss Karl
Code: Alles auswählen
// link
$link = $rss_link."front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]";
//&m=$m&s=$s";
Code: Alles auswählen
// link
$link = $rss_link."cms/front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]";
//&m=$m&s=$s";
Aber danke für all das. Es sieht jetzt wirklich gut aus!
Dann ist oben das älteste und unten das neueste.Karl hat geschrieben:zum Sortieren versuch mal
ORDER BY ARTLANG.created
Dort ist oben das neueste. Vielen Dank. War inzwischen auch darauf gekommen.Karl hat geschrieben:
oder
ORDER BY ARTLANG.created DESC
Karl hat geschrieben: statt
ORDER BY ARTLANG.artsort
im DB Query
Re: Eigenen RSS Feed erstellen - neues Modul
Hallo,
habe das Modul erfolgreich ausprobiert und würde es gerne um ein Veröffentlichungsdatum erweitern. Zunächst habe ich festgestellt, dass offenbar die verwendete RSS-Version 0.9 kein <pubDate> erlaubt, habe also auf RSS 2.0 geändert. Soweit so gut. Allerdings habe ich in MySQL fast keine Ahnung, um eine passende Abfrage und Weiterverarbeitung für das Outputmodul hinzufriemeln. Habt ihr da einen Tipp oder Schnippsel für mich?
Hier der Output, wie ich ihn mit Trial and Error bisher hinbekommen habe (funktioniert so nicht, was das Datum angeht). Ich habe - im Trüben fischend - in der Abfrage der Artikelauswahl herumgefuhrwerkt und weiter unten einen Abschnitt "// select date-test" ergänzt. Nutzen will ich das Startdatum aus der Zeitsteuerung. Ach ja, eine Schwierigkeit noch: Der Feed-Validator auf http://feedvalidator.org/ will auch ausgerechnet ein RFC-822 kompatibles Datum, wie immer man das aus der DB rausquetscht.
Wäre klasse, wenn ich hier Hilfe bekäme. Vielen Dank schon mal!
habe das Modul erfolgreich ausprobiert und würde es gerne um ein Veröffentlichungsdatum erweitern. Zunächst habe ich festgestellt, dass offenbar die verwendete RSS-Version 0.9 kein <pubDate> erlaubt, habe also auf RSS 2.0 geändert. Soweit so gut. Allerdings habe ich in MySQL fast keine Ahnung, um eine passende Abfrage und Weiterverarbeitung für das Outputmodul hinzufriemeln. Habt ihr da einen Tipp oder Schnippsel für mich?
Hier der Output, wie ich ihn mit Trial and Error bisher hinbekommen habe (funktioniert so nicht, was das Datum angeht). Ich habe - im Trüben fischend - in der Abfrage der Artikelauswahl herumgefuhrwerkt und weiter unten einen Abschnitt "// select date-test" ergänzt. Nutzen will ich das Startdatum aus der Zeitsteuerung. Ach ja, eine Schwierigkeit noch: Der Feed-Validator auf http://feedvalidator.org/ will auch ausgerechnet ein RFC-822 kompatibles Datum, wie immer man das aus der DB rausquetscht.
Wäre klasse, wenn ich hier Hilfe bekäme. Vielen Dank schon mal!
Code: Alles auswählen
<?php
/**
* RSS-Ausgabe als XML
*
* OUTPUT
*
* Author Frank Hoffmann
* Copyright www.x28.de
* Anyone can use it. It is OpenSource. Please report any good changes to info@x28.de
*/
// selected category
$selcat = "CMS_VALUE[0]";
if($selcat!="0" && $selcat!=""){
$rss_titel = "CMS_VALUE[1]";
$rss_link = "CMS_VALUE[2]";
$rss_description = "CMS_VALUE[3]";
$rss_copyright = "CMS_VALUE[4]";
$rss_image_url = "CMS_VALUE[5]";
$rss_image_title = "CMS_VALUE[6]";
$rss_image_link = "CMS_VALUE[7]";
// Header ausgeben
header("Content-type: application/rss+xml");
print '<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>'.$rss_titel.'</title>
<link>'.$rss_link.'</link>
<description>'.$rss_description.'</description>
<language>de-de</language>
<copyright>'.$rss_copyright.'</copyright>';
// select all articles in category widthout start article
$query = "SELECT ARTLANG.datestart, ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
$cfg["tab"]["art_lang"]." AS ARTLANG ".
"WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
"ARTLANG.online = '1' ORDER BY ARTLANG.datestart DESC";
// execute query
$db->query($query);
unset($articleID);
unset($linkID);
// get id's of sub articles
while ($db->next_record()) {
$articleID[] = $db->f("idartlang");
$linkID[] = $db->f("idart");
} // end while
// loop through subarticles
if (is_array($articleID)) {
foreach ($articleID as $key => $value) {
// select headline
$sql = "SELECT value FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";
$db->query($sql);
$db->next_record();
$head = urldecode($db->f("value"));
// select subheadline
$sql = "SELECT value FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '2'";
$db->query($sql);
$db->next_record();
$description = urldecode($db->f("value"));
// select date-test
$sql = "SELECT ARTLANG.datestart FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '3'";
$db->query($sql);
$db->next_record();
$pubdate = urldecode($db->f("ARTLANG.datestart"));
// link
$link = $rss_link."&idcat=$selcat&idart=$linkID[$key]&m=$m&s=$s";
print "<item>\n";
print "<title>\n".htmlspecialchars($head)."\n</title>\n";
print "<description>\n".htmlspecialchars($description)."\n</description>\n";
print "<link>\n".htmlspecialchars($link)."\n</link>\n";
print "<pubDate>\n".htmlspecialchars($pubdate)."\n</pubDate>\n";
print "</item>\n";
} // end foreach
unset($head);
unset($description);
} // end if (is_array)
print '</channel>';
print '</rss>';
} // end if (if($selcat!="0" && $selcat!="")
?>
Ich nutze Contenido 4.6.8 mit dem besagten Modul.
Das Modul finde ich schon mal toll... keine Frage...
ABER ...
Zwei Dinge stören mich an dem Modul:
1. Der Cache wird im Adminbereich (contenido/external/cafeRss/cache) hinterlegt, obwohl er auf der Ausgabeseite angezeigt wird (potenzielles Sicherheitsrisiko?!!!?)
2. Dieses Modul kann nicht mir der php-option allow_url_fopen=off betrieben werden.
Gibts hoffnung, da dies geändert wird?
Das Modul finde ich schon mal toll... keine Frage...
ABER ...
Zwei Dinge stören mich an dem Modul:
1. Der Cache wird im Adminbereich (contenido/external/cafeRss/cache) hinterlegt, obwohl er auf der Ausgabeseite angezeigt wird (potenzielles Sicherheitsrisiko?!!!?)
2. Dieses Modul kann nicht mir der php-option allow_url_fopen=off betrieben werden.
Gibts hoffnung, da dies geändert wird?
Zuletzt geändert von rethus am Di 22. Jun 2010, 14:49, insgesamt 1-mal geändert.
Im Modul findest du im letzten Programm-Block folgende Einträge:
Füge dort den Eintrag:
hinzu.
Schreibe in dem Verwendeten Template den entsprechenden Platzhalter "{PUBDATE}"an die Stelle, wo der Spass ausgegeben werden soll.
Damit solltest du das Datum ausgegeben bekommen.
PS: Wenns klappt, könntest du als dankeschön eine Funktion zum Konvertieren des GMT-Datums in gebräuchliche Formate erstellen und hier posten....
Eine Hand wäscht die andere
Code: Alles auswählen
$tpl->set("d", "TITLE", htmlentities($item['title'],ENT_QUOTES));
$tpl->set("d", "LINK", htmlentities($item['link'],ENT_QUOTES));
$tpl->set("d", "DESCRIPTION", htmlentities($item['description'],ENT_QUOTES));
$tpl->set("d", "READ_ON", mi18n("mehr..."));
$tpl->next();
}
Code: Alles auswählen
$tpl->set("d", "PUBDATE", htmlentities($item['pubdate'],ENT_QUOTES));
Schreibe in dem Verwendeten Template den entsprechenden Platzhalter "{PUBDATE}"an die Stelle, wo der Spass ausgegeben werden soll.
Damit solltest du das Datum ausgegeben bekommen.
PS: Wenns klappt, könntest du als dankeschön eine Funktion zum Konvertieren des GMT-Datums in gebräuchliche Formate erstellen und hier posten....
Eine Hand wäscht die andere
einfache Lösung des title-problems
@Karl: Vielen Dank, dass Du deine Lösung gepostest hast, wie man das mit den title-tags in den Griff bekommt. // edit: Das besteht nämlich auch noch in Version 4.6.8 (afaik).
Mir war das ein bischen zu kompliziert, deshalb habe ich auch mal darüber nachgedacht.
Mein Weg: In der Datei contenido/includes/functions.con2.php ist ein Absatz, der die title-tags bearbeitet. Diesen habe ich mit einer if-Abfrage umschlossen, so dass rss-feeds nicht in die Mangel genommen werden:
Kann ja vielleicht jemand gebrauchen …
BTW: Hat jemand das hier:
schon mal für mehrsprachige Sites angepasst? Also – nicht manuell?
Wäre dankbar für einen Hinweis.
Mir war das ein bischen zu kompliziert, deshalb habe ich auch mal darüber nachgedacht.
Mein Weg: In der Datei contenido/includes/functions.con2.php ist ein Absatz, der die title-tags bearbeitet. Diesen habe ich mit einer if-Abfrage umschlossen, so dass rss-feeds nicht in die Mangel genommen werden:
Code: Alles auswählen
// check if this is NOT a rss feed
if(!stristr($code, '<channel>')){
/* add/replace title */
// this is the original code
if ($pagetitle != "")
{
$code = preg_replace("/<title>.*?<\/title>/i", "{TITLE}", $code);
if (strstr($code, "{TITLE}"))
{
$code = str_ireplace("{TITLE}", addslashes("<title>$pagetitle</title>"), $code);
} else
{
$code = str_ireplace_once("</head>", addslashes("<title>".$pagetitle."</title>\n</head>"), $code);
}
} else
{
$code = str_replace('<title></title>', '', $code);
}
// end of original code
} // end if NOT rss feed
BTW: Hat jemand das hier:
Code: Alles auswählen
<link rel="alternate" type="application/rss+xml" title="WBG RSS" href="http://xxxx">
Wäre dankbar für einen Hinweis.
HTML tags in <description>
Das Modul ist klasse. Hat bei mir auch auf Anhieb funktioniert.
Nun habe ich das folgende Problem:
Meine Autoren nutzen Tiny um Artikel zu posten. Die Subheadlines sind oft mit HTML Tags garniert <STRONG>, <BR>, usw.
Diese stehen ja in der DB und werden dann auch in dem <description> Feld ausgegeben.
Kenn jemand einen eleganten Weg diese herauszufiltern?
Bin ebenfalls dankbar für jeden Hinweis!
Nun habe ich das folgende Problem:
Meine Autoren nutzen Tiny um Artikel zu posten. Die Subheadlines sind oft mit HTML Tags garniert <STRONG>, <BR>, usw.
Diese stehen ja in der DB und werden dann auch in dem <description> Feld ausgegeben.
Kenn jemand einen eleganten Weg diese herauszufiltern?
Bin ebenfalls dankbar für jeden Hinweis!
-
- Beiträge: 36
- Registriert: Di 12. Aug 2008, 10:27
- Kontaktdaten:
Re: Eigenen RSS Feed erstellen - neues Modul
bei mir funktioniert das modul zwar jedoch werden html zeichen eingeblendet wie <br> <p>. wie bekomme ich diese weg. sieht bischen komisch aus wenn mitten im text <br> erscheint.
danke
danke