Hallo,
ich hab in den letzten Tagen mir ein kleines Skript/Template geschrieben, mit dem ein RSS-Feed für alle neuen/aktualisierten Photoalben erstellt wird.
In Sachen Contao-Programmierung bin ich noch total Anfänger, daher ist es (noch) keine eigenständige Erweiterung geworden.
Eingebaut habe ich den Code in das Template "be_welcome.tpl" , also wenn man sich einloggt, dann wird das Skript gestartet. Eingefügt direkt unter
PHP-Code:
<?php if ($this->lastLogin): ?>
<p class="tl_update"><?php echo $this->lastLogin; ?></p>
<?php endif; ?>
und noch innerhalb von
PHP-Code:
<div id="tl_messages"></div>
Der Code:
PHP-Code:
<?php
/**
* RSS-Feed aus den Fotoalben generieren
* Version: 0.3
* date: 22.07.2011
* author: µaTh
*/
$this->import('BackendUser', 'User');
$this->import('Database');
// letzte Änderung anhand des Zeitstempels ermitteln
$letzteFotoalbumAktualisierung = $this->Database->execute("SELECT max(tstamp) as max FROM tl_photoalbums WHERE published=1");
// prüfen, ob sich seit dem letzten Login etwas in den Fotoalben geändert hat
if ($this->User->lastLogin < $letzteFotoalbumAktualisierung->max) {
// es hat sich etwas geändert => neuen RSS-Feed aufbauen
// neuer RSS-Feed
$feed = new Feed('fotoalbum');
$feed->title = 'Fotoalben'; // Titel des RSS-Feed
$feed->description = 'RSS-Feed mit allen neuen und aktualisierten Fotoalben auf unserer Webseite.'; // Beschreibung des RSS-Feed
$feed->link = $this->Environment->base; // Url des Feeds
$feed->language = 'de_DE'; // Sprache des Feeds
$feed->published = time(); // Datum der Feed-Veröffentlichung
// die letzten 10 geänderten Fotoalben, sortiert nach Änderungsdatum, ermitteln
$fotoalbum = $this->Database->execute("SELECT * FROM tl_photoalbums WHERE published=1 ORDER BY tstamp DESC LIMIT 10");
// die einzelnen Alben abarbeiten
while($fotoalbum->next()) {
// neues RSS-Item erstellen
$item = new FeedItem();
$item->title = $fotoalbum->event; // Item-Titel = Event-Titel
$item->published = strtotime(date("d.m.Y H:i",$fotoalbum->tstamp)); // Item-Datum = Änderungsdatum des Fotoalbums
$item->guid = $fotoalbum->id;
// spezielles Vorschaubild festgelegt?
if ($fotoalbum->selectPreviewImage == 1) {
// ein spezielles Vorschaubild wurde ausgewählt
// prüfen, ob das ausgewählte Bild im Dateiverzeichnis vorhanden ist
if (file_exists(TL_ROOT . '/' . $fotoalbum->previewImage) ) {
// Bild im Dateiverzeichnis vorhanden. Nun als Thumbnail verkleinern
$item->addEnclosure($this->getImage( $fotoalbum->previewImage,
250, //Breite
200, // Höhe
'proportional' // Proportionen von Höhe x Breite
));
} // falls das ausgewählte Vorschaubild nicht mehr im Dateiverzeichnis vorhanden ist, dann wird kein Bild in den RSS-Feed eingebunden!
} else {
// kein spezielles Vorschaubild ausgewählt. Nutze das erste Bild im ausgewählten Ordner
// Prüfen, ob der ausgewählte Ordner existiert und ein Ordner (also keine Datei) ist
if (file_exists(TL_ROOT . '/' . $fotoalbum->directory) && is_dir(TL_ROOT . '/' . $fotoalbum->directory)) {
// gewählter Pfad ist ein Ordner und noch vorhanden. Scanne nun den Ordner
$files = scan(TL_ROOT . '/' . $fotoalbum->directory);
// prüfe, ob in dem gewählten Ordner Dateien vorhanden sind.
if(count($files) > 0) {
// Dateien sind im Dateiverzeichnis vorhanden. Nun die erste Datei als Thumbnail verkleinern
$item->addEnclosure($this->getImage( $fotoalbum->directory.'/'.$files[0],
250, // Breite
200, // Höhe
'proportional' // Proportionen von Höhe x Breite
));
}
}
}
// je nach Fotoalbenarchiv/kategorie den entsprechenden Fotoalbenleser auswählen
$photoalbumarchive = $this->Database->execute("SELECT * FROM tl_photoalbums_archive WHERE id = ".$fotoalbum->pid);
$page = $this->Database->execute("SELECT alias FROM tl_page WHERE id=".$photoalbumarchive->jumpTo);
$item->description = $photoalbumarchive->title.": ".$fotoalbum->event." in ".$fotoalbum->place." am ".date("d.m.Y",$fotoalbum->dateStart);
$item->link = $this->Environment->base.$page->alias."/items/".$fotoalbum->alias.".html";
$feed->addItem($item);
}
$feeddatei = 'neuefotoalben.xml';
$file = new File($feeddatei);
$file->write($feed->generateRss());
$file->close();
$this->log("RSS-Feed für die Fotoalben wurde neu generiert","Template be_welcome.tpl","");
echo "<div style=\"background:url('system/modules/photoalbums/html/icon.gif') no-repeat;padding-left:20px;margin:2px 2px 2px 6px;\"><a href=\"".$this->Environment->base.$feeddatei."\" ".LINK_NEW_WINDOW." style=\"color:green;\">neuer <b>Fotoalbum-RSS-Feed</b> erstellt</a></div>";
}
?>
Damit der RSS-Feed den Frontend-Usern zur Verfügung steht, muss noch unter "Themes"->"Seitenlayout", Abschnitt "Experten-Einstellungen" im Textbereich "Zusätzliche <head>-Tags" der Code
HTML-Code:
<link title="Alle neuen Fotoalben als RSS-Feed" type="application/rss+xml" href="http://domain.de/neuefotoalben.xml" rel="alternate">
eingetragen werden.
Für mich erfüllt dieses Skript meinen langen gehegten Wunsch den Frontenduser ein RSS-Feed über neue/aktualisierte Fotoalben der Erweiterung "Photoalbums" zur Verfügung zu stellen. Vllt. kann der ein oder andere die Sache auch gebrauchen.
Ich übernehme keine Gewähr und Haftung für den Einsatz dieses Quellcodes.
Über Ideen, Tipps und Kritiken bin ich jederzeit offen.
Hinweis: diese Funktionalität ist in nun in meiner Erweiterung photoalbumsRssFeed zu finden: http://www.contao-community.de/showt...lben-erstellen
Lesezeichen