MagpieRSS und Smarty heiraten

Werbung

News-Feeds lassen sich auf verschiedene Weise auf Webseiten präsentieren. Beliebt ist MagpieRSS. Technisch ist alles in Ordnung, doch eine ansprechende Gestaltung macht viel Arbeit. Warum nicht mit dem Template-System Smarty komfortabel formatieren – in 7 Zeilen PHP-Code.

MagpieRSS bietet in seiner reinen Form keinerlei Möglichkeiten, die Ausgabe komfortabel zu formatieren oder zu gestalten. Handarbeit ist angesagt – oder MagpieRSS wird mit dem Template-System Smarty verkuppelt. Das ist einfacher als gedacht:

Schritt 1: Smarty und MagpieRSS
Laden Sie Smarty und MagpieRSS auf Ihren Computer, entpacken Sie beide Archive in dasselbe Verzeichnis.

Schritt 2: Hochladen
Schieben Sie beide Verzeichnisse mit einem FTP-Programm oder etwas Ähnlichem auf Ihren Webserver.

Schritt 3: Verzeichnisse anlegen
Smarty benötigt zwei spezielle Verzeichnisse: “templates” und “templates_c”. In “templates” werden HTML-Vorlagen gespeichert. Die Vorlagen sind an der Dateiendung “.tpl” zu erkennen. Das Verzeichnis “templates_c” dient Smarty als Ablageort für bereits verarbeitete Vorlagen. Aus diesem Grund muss das Verzeichnis vom Webserver-Prozess beschreibbar sein. Geben Sie dem Besitzer und der Gruppe des Besitzers vollen Zugriff auf die Datei, also “Lesen”, “Schreiben” und “Ausführen”. Funktioniert das nicht, geben Sie allen volle Rechte (Achtung – potenzielle Sicherheitslücke!). In diesem Fall sollten Sie das Verzeichnis außerhalb des WWW-Roots platzieren, damit es nicht über Webbrowser abrufbar ist.

FTP
Setzen Sie die Zugriffsrechte

Schritt 4: HTML-Vorlage
Die HTML-Vorlage nach Smarty-Art ist sehr einfach aufgebaut:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01  Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>{$title}</title> </head> <body bgcolor="#ffffff">

 <h1>{$title}</h1> <ul> {foreach from=$rssitems item=eintrag} <li><a href="{$eintrag.link}">{$eintrag.title}</a> von {$eintrag.dc.creator}</li> {/foreach} </ul>

 </body> </html>

Speichern Sie die Datei im Verzeichnis “templates” unter dem Namen “magptest.tpl”. Smarty-Variablen sind an den geschweiften Klammern zu erkennen. Beachten Sie die Foreach-Schleife. In diesem Konstrukt werden die Einträge aus dem RSS-Feed als li-Elemente in eine unsortierte Liste eingefügt.

Schritt 5: Das Skript
Nun folgt das eigentliche Skript. Speichern Sie es in dem Verzeichnis, in dem sich die Verzeichnisse von MagpieRSS und Smarty befinden und nennen sie die Datei “magptest.php”. Abzüglich Kommentare und Leerzeilen besteht es nur aus sieben Zeilen PHP-Code:

   <?php // MagpieRSS einbinden require( 'magpierss-0.72/rss_fetch.inc' );

 // Smarty einbinden require  'Smarty-2.6.14/libs/Smarty.class.php' ;

 // RSS-Feed holen $rss  =  fetch_rss ( "http://www.medienkompetenz.hostsys.de/index.php/feed/" );

 // Smarty anwerfen $smarty  = new  Smarty ;

 // #### Feed-Einträge in HTML-Vorlage übertragen $smarty -> assign ( 'rssitems' ,  $rss -> items );

 // Titel in HTML-Vorlage schreiben $smarty -> assign ( 'title' ,  $rss -> channel [ 'title' ]);

 // Vorlage verarbeiten und anzeigen $smarty -> display ( "magptest0.tpl" );

 ?>   

Der Smarty-Variablen “rssitems” wird einfach das Array mit den Feed-Einträgen, das MagpieRSS aus dem übertragenen XML erzeugt, zugewiesen. Die Feed-Adresse in der Funktion fetch_rss() von MagpieRSS können Sie natürlich nach Ihren Wünschen anpassen.

Demo im neuen Fenster

Ausgabe formatieren
Angenommen, der RSS-Feed ist so lang, dass er nicht mehr auf eine Seite passt – was dann? Der Smarty-Entwickler Monte Ohrt hat für dieses Problem eine Erweiterung entwickelt, die allerdings nicht mit dem Smarty-Archiv geliefert wird. So gehts:

Schritt 1: SmartyPaginate herunterladen
Laden Sie von das Archiv SmartyPaginate herunter und entpacken Sie es auf Ihrem Rechner. Kopieren Sie die PHP-Dateien, deren Dateiname mit “function” beginnen, in das Verzeichnis “Smarty-x.x/libs/plugins”. Die Datei “SmartyPaginate.class.php” kopieren Sie nach “Smarty-x.x/libs”.

Schritt 2: magptest.php erweitern
Erweitern Sie das Skript magptest.php wie folgt. Fügen Sie nach dem Kommentar “Smarty einbinden” folgende Zeilen ein:

   <?php // #### Paginierungserweiterung einbinden require  'Smarty-2.6.14/libs/SmartyPaginate.class.php'  

Die Zeile “$smarty->assign(‘rssitems’, $rss->items);” ersetzen Sie durch diese Zeilen:

   // ### Anzahl der Einträge pro Seite SmartyPaginate :: setLimit ( 4 );

 // "prev" und "next" eindeutschen SmartyPaginate :: setPrevText ( 'Zur&uuml;ck' ); SmartyPaginate :: setNextText ( 'Weiter' );

 // #### Feed-Einträge in HTML-Vorlage übertragen $smarty -> assign ( 'rssitems' ,  get_results (& $rss ));

 // Ausgabe der Erweiterung in die Vorlage schreiben  SmartyPaginate :: assign ( $smarty );  

Den Abschluss bildet eine neue Funktion, die Sie am Ende des Skriptes einfügen:

  // #### Array mit Feed-Einträgen aufspalten function  get_results (& $rss ) {  $_data  =  $rss -> items ;  SmartyPaginate :: setTotal ( count ( $_data )); return  array_slice ( $_data ,  SmartyPaginate :: getCurrentIndex (),  SmartyPaginate :: getLimit ()); } 

Schritt 3: Vorlage erweitern
Fügen Sie vor die <ul>-Markierung diese Smarty-Elemente ein:

  {* Kopfzeile anzeigen *} Einträge {$paginate.first}-{$paginate.last} von {$paginate.total} insgesamt. 

Nach </ul> müssen die Verweise zum Seiten-Blättern eingefügt werden:

  {* Seiten vor- und zurückblättern *} {paginate_prev} {paginate_middle} {paginate_next} 

Das Ergebnis (Demo) ist eine auf mehreren Seiten verteilte RSS-Feed-Anzeige, die mit minimalem Aufwand programmiert wurde.

Links:

  • MagpieRSS
  • Smarty
  • Beispiel-Skripte zum Herunterladen (2 kb)
  • Demo (einfach)
  • Demo

Weitere Beiträge:

, ,

Noch keine Kommentare vorhanden!

Hinterlasse eine Antwort

Bitte bei weiteren Kommentaren per Email benarichtigen! Auch möglich: Abo ohne Kommentar.

Spam protection by WP Captcha-Free