Eigenen RSS Feed erstellen - neues Modul

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 1. Dez 2004, 19:43

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!

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Mi 1. Dez 2004, 20:36

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:

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

Karl
Beiträge: 185
Registriert: Fr 28. Nov 2003, 19:07
Kontaktdaten:

Beitrag von Karl » Mi 1. Dez 2004, 20:53

zum Sortieren versuch mal

ORDER BY ARTLANG.created

oder

ORDER BY ARTLANG.created DESC

statt

ORDER BY ARTLANG.artsort

im DB Query
Gruss Karl

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 1. Dez 2004, 21:23

Code: Alles auswählen

// link
         $link = $rss_link."front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]";
//&m=$m&s=$s"; 
Musste ich in

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"; 
ändern, da ansonsten bei mir das Verzeichnis falsch ist.


Aber danke für all das. Es sieht jetzt wirklich gut aus!

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 1. Dez 2004, 21:41

Karl hat geschrieben:zum Sortieren versuch mal

ORDER BY ARTLANG.created
Dann ist oben das älteste und unten das neueste.
Karl hat geschrieben:
oder

ORDER BY ARTLANG.created DESC
Dort ist oben das neueste. Vielen Dank. War inzwischen auch darauf gekommen.
Karl hat geschrieben: statt

ORDER BY ARTLANG.artsort

im DB Query

schulzi
Beiträge: 15
Registriert: Do 1. Apr 2004, 22:07
Kontaktdaten:

Re: Eigenen RSS Feed erstellen - neues Modul

Beitrag von schulzi » Do 19. Mai 2005, 12:48

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!

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!="")

?> 

rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Mo 15. Mai 2006, 14:15

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?
Zuletzt geändert von rethus am Di 22. Jun 2010, 14:49, insgesamt 1-mal geändert.

Jojoweb
Beiträge: 29
Registriert: Do 21. Apr 2005, 14:59
Kontaktdaten:

Beitrag von Jojoweb » Fr 26. Mai 2006, 01:06

Hallo,

hat jemand eine Lösung, wie ich im <pubDate> das Erstellungsdatum angezeigt bekomme?
Habe mein bestes versucht, aber funktioniert leider nicht!

Gruß
Jojoweb

rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Mo 29. Mai 2006, 16:31

Im Modul findest du im letzten Programm-Block folgende Einträge:

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();
	}
Füge dort den Eintrag:

Code: Alles auswählen

 $tpl->set("d", "PUBDATE", htmlentities($item['pubdate'],ENT_QUOTES));
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 :wink:

nonano
Beiträge: 43
Registriert: Do 13. Apr 2006, 17:45
Kontaktdaten:

einfache Lösung des title-problems

Beitrag von nonano » Fr 23. Jun 2006, 06:41

@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:

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
Kann ja vielleicht jemand gebrauchen …

BTW: Hat jemand das hier:

Code: Alles auswählen

<link rel="alternate" type="application/rss+xml" title="WBG RSS" href="http://xxxx"> 
schon mal für mehrsprachige Sites angepasst? Also – nicht manuell?
Wäre dankbar für einen Hinweis.

Mxn
Beiträge: 29
Registriert: Do 2. Jun 2005, 21:19
Kontaktdaten:

HTML tags in <description>

Beitrag von Mxn » Mo 17. Jul 2006, 10:25

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!

Mxn
Beiträge: 29
Registriert: Do 2. Jun 2005, 21:19
Kontaktdaten:

Beitrag von Mxn » Mo 17. Jul 2006, 12:38

Ok, habs!

strip_tags ist mein Freund :-)

Jamest
Beiträge: 137
Registriert: Mi 2. Aug 2006, 09:29
Kontaktdaten:

Beitrag von Jamest » Mo 11. Aug 2008, 12:28

Der Download funktioniert nicht, könnte mal jemand das Modul mit allem was dzu gehört posten? Danke.

Liquidstone
Beiträge: 36
Registriert: Di 12. Aug 2008, 10:27
Kontaktdaten:

Beitrag von Liquidstone » So 17. Aug 2008, 14:46

die Seite scheint es wohl nicht mehr zu geben...würde das Modul aber auch gern haben...wo findet man es jetzt?

tradex1
Beiträge: 10
Registriert: Fr 11. Jun 2010, 21:39
Kontaktdaten:

Re: Eigenen RSS Feed erstellen - neues Modul

Beitrag von tradex1 » Di 15. Jun 2010, 19:18

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

Gesperrt