Silverstripe: RSS-Feed auf allen Seiten anzeigen
In der Silverstripe-Dokumentation wird beschrieben, wie man das Link-Tag für einen RSS-Feed auf einer Seite ausgibt. Um dieses Tag aber auf allen Seiten eines Auftritts auszugeben, braucht es ein paar Anpassungen.
Als Beispiel nehme ich hier ein News-Modul, das für die Übersichtsseite den Seitentyp NewsOverview und für die einzelnen Einträge NewsPage verwendet.
Um das Link-Tag für den RSS-Feed auf allen Seiten ausgeben zu können, muss die in der Dokumentation beschriebene Methode init() generalisiert und auf alle Seiten erweitert werden. Dazu wird eine Extension für den Page_Controller implementiert, der für jede Instanz des Seitentyps NewsOverview ein Link-Tag generiert:
class NewsRssExtension extends Extension{
function onBeforeInit(){
$aOverviewPages = DataObject::get("NewsOverview");
foreach($aOverviewPages as $page) {
RSSFeed::linkToFeed($page->Link("rss"), $page->Title." as RSS feed");
}
}
}
Diese Extension wird in der Datei _config.php dem Page_Controller angehängt:
Object::add_extension('Page_Controller','NewsRssExtension');
In der Klasse NewsOverview_Controller wird (wie in der Silverstripe-Dokumentation beschrieben) die rss-Methode integriert, welche die Newseinträge ausgibt:
class NewsOverview_Controller extends Page_Controller {
function rss() {
$rss = new RSSFeed($this->NewsItems(10), $this->Link(), $this->Title, null, "Title", "Content", "", "LastEdited");
$rss->outputToBrowser();
}
function NewsItems($limit = 0) {
$curChildren = $this->AllChildren();
if ($curChildren) {
$curChildren->sort('Date', 'DESC');
if ($limit > 0) {
$curChildren = $curChildren->getRange(0,$limit);
}
}
return $curChildren;
}
}
Mit dieser kleinen Anpassung können nun alle Feeds des Auftritts auf allen Seiten abonniert werden.
Geben Sie einen Kommentar ab
Kommentare
Bisher hat niemand diese Seite kommentiert.