[GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Hilfe zu Modulen und Tags
Post Reply
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

[GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by jeff1980 »

Hi,

eigentlich steht die Kernfrage schon im Titel.
Für eine Seite möchte ich einen RSS-Feed erstellen. Dabei geht es aber nicht um Artikel aus dem Newsmodul sondern um die eigentlichen Inhalte dieser Seite (die sehr häufig ergänzt/aktualisiert werden).
Aus diesen Inhalten möchte ich nun gerne einen Feed generieren.
Testweise habe ich mal den CGFeedMaker installiert und versucht, in Verbindung mit dem Newsmodul einen Feed zu generieren. Dabei erscheint allerdings immer die 404-Seite, wenn ich den RSS-Link anklicke (die Seite arbeitet mit mod_rewrite um saubere URLs zu bekommen).
Mit ContentDump habe ich in HTML-Form schon das Ergebnis, wie ich es abgebildet haben möchte:

Code: Select all

 {content_dump limit_count="10" first_sort="modified" first_sort_order="down" do_smarty="compile" cdlocale="de-de"}

 {foreach from=$dump item=dump}
<small>Letzte Änderung: {$dump->modified->date}</small><br />
  <h2>{$dump->content->title}</h2>
{$dump->content->data}
 {/foreach}
Jetzt habe ich hier im Forum verschiedene Beiträge gefunden, wo es schon um dieses Thema geht - aber immer nur in der Form "es geht" und leider nie mit Beschreibung wie es geht  :(.

Hat jemand einen solchen Feed im Einsatz? Wenn ja, wie ist er realisiert? Bin da echt neugierig  ;).

Jan
Last edited by jeff1980 on Thu Aug 19, 2010 3:53 pm, edited 1 time in total.
uniqu3

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by uniqu3 »

Hi,

also CGFeedMaker und News funktionert auf jeden fall, siehe meine seite, da habe ich News in Portfolio umbenant aber im Prinzip ist es das selbe und verwende ebenfalls mod_rewrite. Ich leite diesen feed dann an feedburner weiter wegen Statistiken.

Wie hast Du es eingerichtet.
Bei mod_rewrite solltest Du mit feed Dateiendungen aufpassen, da hat es bei mir ohne Dateiendung geklappt.
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by jeff1980 »

Hi uniqu3,

das mit den Dateiendungen war schon mal ein guter Tipp - danke! Habe diese jetzt mal auf "htm" umgestellt (so wie es auch für den Rest der Seite vorgegeben ist) und die Seite wird zumindest geladen. Mit dem News-Modul funktioniert es nun auch.
Ist das denn .htm prinizipiell für RSS-Feeds in Ordnung? Kenne sonst nur die Endungen xml oder rss dafür.

Ich habe jetzt auch schon mal nach variablen für den Content selbst geschaut (soll ja aus den eigentlichen Inhaltsseiten, nach Datum sortiert, generiert werden). Aber da komme ich leider nicht weiter.
Habe im Template (unter all den RSS-Sachen) folgendes eingefügt (inspiriert vom News-Template):

Code: Select all

    {content assign='junk'}
    {foreach from=$conent_obj item='content_obj'}
    <item>
      <title>{$content_obj->mMenuText}</title>
      <link></link>
      <description>{$content_obj->content_en}</description>
      <pubDate>{$content_obj->mModifiedDate}</pubDate>
      <guid></guid>
    </item>
    {/foreach}
Nur leider wird so nichts angezeigt. Zudem wird (wenn was angezeigt wird) ja wahrscheinlich auch nicht nach Datum sortiert.

Hat jemand ein solches Template schon mal gebaut? Bitte....  ;)

Jan
NaN

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by NaN »

Die URL ist soweit ich weiß eigentlich egal.
Wichtig ist, dass das Attribut type="application/rss+xml" angegeben ist.

Ich habe einfach nur in den Einstellungen des CGFeedmakers die Dateiendung rss angegeben. Funktioniert auch mit mod_rewrite.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by nockenfell »

NaN wrote:
Ich habe einfach nur in den Einstellungen des CGFeedmakers die Dateiendung rss angegeben. Funktioniert auch mit mod_rewrite.
Hier kommt es auf die rewrite Regel an. Bei ein paar Seiten habe ich im .htaccess explizit drin, dass die Endung .htm heissen muss. Somit verarbeitet sie kein RSS. Wenn die Endung offen gelassen wird, funktioniert es auch mit rss. (allerdings auch mit allen anderen Endungen)
[this message is written with 100% recycled bits]
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by jeff1980 »

Hi,

habe noch mal etwas experimentiert - sowohl mit dem CGFeedMaker als auch mit dem ContentDump-PlugIn.
Der CGFeedMaker läuft jetzt in Verbindung mit dem News-Modul und der Endung .rss (http://www.festtagsgedichte.de/feeds/news.rss). Allerdings eben nur mit dem Newsmodul, welches nicht genutzt wird. Ich habe vergeblich versucht, über das Template des CGFeedMakers den eigentlichen Content einzubinden (auch mit dem ContentDump-PlugIn) leider ohne Erfolg.

Vorhin kam mir noch die Idee, wie ich es mit dem ContentDump-PlugIn allein hinbekommen könnte. Ich habe ein neues Template gebaut mit folgendem Inhalt:

Code: Select all

<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://www.festtagsgedichte.de/test.htm" rel="self" type="application/rss+xml" />
    <title>Sample News feed</title>
    <link>http://www.festtagsgedichte.de/test.htm</link>    <description>Festtagsgedichte RSS-Feed</description>        <generator>CMS Made Simple</generator>        <webMaster>webmaster@festtagsgedichte.de (Jan Schöne)</webMaster>    
                
{content}
      </channel>
</rss>
Das Ganze ohne CSS o.ä. und einer Seite mit folgendem Content zugewiesen:

Code: Select all

{content_dump limit_count="10" first_sort="modified" first_sort_order="down" do_smarty="compile" cdlocale="de-de"}

{foreach from=$dump item=dump}
<item>
<title>{$dump->content->title}</title>
<link>http://www.festtagsgedichte.de/{$dump->content->alias}.htm</link>
<description>{$dump->content->data}</description>
<pubDate>Letzte Änderung: {$dump->modified->date}</pubDate>
<guid>http://www.festtagsgedichte.de/news/1/3209/News-Module-Installed.htm</guid>
</item>
{/foreach}
Die Seite wird jetzt zwar mit der Endung .htm ausgegeben (ist ja eine normale Inhaltsseite) aber trotzdem als Feed erkannt: http://www.festtagsgedichte.de/test.htm
Allerdings wird nichts angezeigt. Schaut man sich den Quelltext an, sind die Inhalte aber da. Ich hab auch schon versucht, html-Tags aus den Dumps heraus zu "stripen" - macht aber auch keinen Unterschied.

Für mich sieht der Quelltext genau so aus, wie der vom CGFeedMaker generierte - oder habe ich da was übersehen? Stört vielleicht doch die Endung .htm?
Fragen über Fragen.... Mit der Hoffnung auf Antworten

Jan  :)
Last edited by jeff1980 on Thu Aug 19, 2010 12:29 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by nockenfell »

http://validator.w3.org/feed/check.cgi? ... 2Ftest.htm

Schau mal die Resultate des Validators an. Die und Tags hat er nicht gerne.
[this message is written with 100% recycled bits]
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by jeff1980 »

Jipi - habs hinbekommen. War noch ein sch... Akt, aber der Validator hat mich Stück für Stück heran geführt.
Letztendlich sieht der komplette Code nun so aus.

Template (nicht im CGFeedMaker!!!):

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://www.domain.de/feed.htm" rel="self" type="application/rss+xml" />
    <title>Feed-Titel</title>
    <link>http://www.domain.de/feed.htm</link>    
    <description>Feed-Beschreibung</description>        
    <generator>CMS Made Simple</generator>        
    <webMaster>mail@domain.de (Vorname Nachname)</webMaster>    
                
    {content}

  </channel>
</rss>
Die Seite für den Feed sieht so aus (mit dem ContentDump-PlugIn):

Code: Select all

{content_dump limit_count="10" first_sort="modified" first_sort_order="down" do_smarty="strip" dateformat="%a, %d %b %Y %T EST"}

{foreach from=$dump item=dump}
<item>
<title>{$dump->content->title}</title>
<link>http://www.domain.de/{$dump->content->alias}.htm</link>
<description><![CDATA[{$dump->content->data}]]></description>
<pubDate>{$dump->modified->date}</pubDate>
<guid>http://www.domain.de/{$dump->content->alias}.htm</guid>
</item>
{/foreach}
Ich hatte erst eine Version, in der HTML gestript wurde und die Umlaute (ü etc.) umgewandelt wurden, allerdings haben Zeilenumbrüche so nicht hingehauen. Dann habe ich den Tipp mit CDATA gefunden und es funktioniert.
Der Validator meckert zumindest nicht mehr und das ist ja schon mal gut.
Anschauen kann man sich das Ganze hier:
http://www.festtagsgedichte.de/feed.htm

Vielen dank an alle Helfer - ohne die Tipps wäre ich nicht da hin gekommen. Und vielleicht hilft dieser Weg nun auch anderen.

Falls übrigens an diesem Weg noch etwas nicht stimmen sollte oder wenn jemand eine Idee hat, wie man die Endung evtl. noch von .htm auf .rss oder .xml biegt - ich bin weiter offen  :).

Jan
NaN

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by NaN »

Das ist ja ganz nett, aber wo hast Du den Feed versteckt?
Im Browser wird er mir nirgends angezeigt. Außer auf der Feed-Seite selbst, aber die wird ja nicht im Menü angezeigt. Auch nicht in der Sitemap
Du musst den Link zum Feed noch in den Head Deines Templates packen, damit Bots und Browser auch wissen, dass es sowas auf Deiner Seite gibt.

Also sowas hier:

Code: Select all


<link rel="alternate" type="application/rss+xml" title="Die aktuellesten Sachen hier" href="{cms_selflink href="feed"}" />

nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by nockenfell »

Warum machst du nicht alles im Template? Den Content-Teil brauchst du ja nicht unbedingt in ein Inhalt auszulagern. Ich mache das jeweils so mit Seiten, welche vom Kunden nicht geändert werden dürfen.
[this message is written with 100% recycled bits]
NaN

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by NaN »

nockenfell wrote: Warum machst du nicht alles im Template?
Meinst Du so ?

Code: Select all


{if $page == 'feed'}

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://www.domain.de/feed.htm" rel="self" type="application/rss+xml" />
    <title>Feed-Titel</title>
    <link>http://www.domain.de/feed.htm</link>    
    <description>Feed-Beschreibung</description>        
    <generator>CMS Made Simple</generator>        
    <webMaster>mail@domain.de (Vorname Nachname)</webMaster>    
                
    {content}

  </channel>
</rss>

{else}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<__html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

<head>
	<title>Festtagsgedichte - Gedichte zu jedem Anlass - Home</title>
	<link rel="alternate" type="application/rss+xml" title="Die aktuellesten Sachen hier" href="{cms_selflink href="feed"}" />
	...

{/if}

jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by jeff1980 »

Hi,

ich denke mal, es ist so gemeint:

Code: Select all

{if $page == 'feed'}

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://www.domain.de/feed.htm" rel="self" type="application/rss+xml" />
    <title>Feed-Titel</title>
    <link>http://www.domain.de/feed.htm</link>    
    <description>Feed-Beschreibung</description>        
    <generator>CMS Made Simple</generator>        
    <webMaster>mail@domain.de (Vorname Nachname)</webMaster>    
                
    {content_dump limit_count="10" first_sort="modified" first_sort_order="down" do_smarty="strip" dateformat="%a, %d %b %Y %T EST"}

    {foreach from=$dump item=dump}
    <item>
    <title>{$dump->content->title}</title>
    <link>http://www.domain.de/{$dump->content->alias}.htm</link>
    <description><![CDATA[{$dump->content->data}]]></description>
    <pubDate>{$dump->modified->date}</pubDate>
    <guid>http://www.domain.de/{$dump->content->alias}.htm</guid>
    </item>
    {/foreach}

  </channel>
</rss>

{/if}
Ginge sicher auch - zum Experimentieren war es so leichter für mich  :).

Den Feed habe ich noch nicht eingebunden, da ich gerade dabei bin, das Design zu überarbeiten. Dort ist dann auch ein schöner Platz für den Feed-Button vorgesehen. Solange wollte ich noch ein bisschen damit experimentieren (u.a. wie viele Texte angezeigt werden usw.).

Gibt es eigentlich sonst noch irgendwas zu beachten? Ist mein erste Feed, mit dem ich zu tun habe.
Feedburner wollte ich mir auch mal anschauen.

Jan
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by nockenfell »

Ich meinte Jan's Antwort. Natürlich könnte man das auch wie NaN vorgeschlagen im Haupttemplate einfügen. Ich finde der {content} Teil hat hier nichts verloren.

Anstelle des ContentDump Moduls könnte der Code auch als UDT ausgeführt werden:

http://wiki.cmsmadesimple.org/index.php ... gs_here/de

Code: Select all

$output = '<div class="nav"><div class="heading">Aktualisierungen</div>';
$output .= '<ul class="links">';
global $gCms;
$hm =& $gCms->GetHierarchyManager();
$db = &$gCms->db;
// gibt eine Liste der 10 zuletzt aktualisierten Seiten aus (außer der Startseite)
$q = "SELECT * FROM ".cms_db_prefix()."content WHERE (type='content' OR type='link')
AND default_content != 1 AND active = 1 AND show_in_menu = 1 
ORDER BY modified_date DESC LIMIT 10";
$dbresult = $db->Execute( $q );
if( !$dbresult )
{
    echo 'Datenbankfehler: '. $db->ErrorMsg()."<br/>";
}
while ($dbresult && $updated_page = $dbresult->FetchRow())
{
    $curnode =& $hm->getNodeById($updated_page['content_id']);
    $curcontent =& $curnode->GetContent();
    $output .= '<li class="updated">';
    $output .= '<a href="'.$curcontent->GetURL().'">'.$updated_page['content_name'].'</a>';
    $output .= '<br />';
    $output .= $updated_page['titleattribute'];
    $output .= '<br />';
    $output .= 'Bearbeitet: ' .$updated_page['modified_date'];
    $output .= '</li>';
}
$output .= '</ul></div>';
echo $output;
Ich habe den Code 1:1 aus der Share your Tags Seite kopiert. Für den Feed müsste er noch angepasst werden.
[this message is written with 100% recycled bits]
nhaack

Re: [GELÖST] RSS-Feed erzeugen - CGFeedMaker oder ContentDump?

Post by nhaack »

Ich seh' Beiträge zu Content_Dump immer viel zu spät :( Müsste hier mal öfters reinschauen.

Freut mich, dass es bei dir geklappt hat. Ich meine, das einzige "Problem" bestand mit dem MimeType der Datei, da der bei einer normalen CMSSeite text/html ist und nicht application/rss+xml bzw. text/xml (bin mir da g'rad nicht ganz sicher).

Es gab dazu mal einen Hack (http://forum.cmsmadesimple.org/index.ph ... 190.0.html) keine Ahnung, ob der eigentlich noch notwendig ist... weist da jemand Aktuelles (hab' mich hier lange nicht herumgetrieben)?

Wenn er aber läuft und validiert ist ja alles in Butter.

Grüße
Nils
Post Reply

Return to “Module und Tags”