Ergebnis 1 bis 4 von 4

Thema: [photoalbums] RSS-Feed erstellen

  1. #1
    Contao-Fan Avatar von µaTh
    Registriert seit
    13.05.2010.
    Beiträge
    951

    Standard [photoalbums] RSS-Feed erstellen

    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

  2. #2
    Contao-Fan Avatar von µaTh
    Registriert seit
    13.05.2010.
    Beiträge
    951

    Standard

    mhm, das ist ja ärgerlich. Der Contao-Cron-job löscht die erstellte XML-Datei/RSS-Feed wieder

  3. #3
    Contao-Fan Avatar von µaTh
    Registriert seit
    13.05.2010.
    Beiträge
    951

    Standard

    Zitat Zitat von leo.unglaub Beitrag anzeigen
    Bitte erst etwas suchen, das hatten wir alle schon 100000 mal: http://www.contao.org/hooks-verwende...removeOldFeeds
    danke Leo. Der Post war zwar kein direkter Hilfeschrei, sondern nur ein Hinweis, dass das Skript da oben nicht so ganz funktioniert, wie ich es mir vorgestellt habe. Aber Dank deinem Tipp, konnte ich die Sache jetzt beheben.

    Ich hab nun die Sache als Erweiterung zusammengebastelt und werde es jetzt ein paar Tage testen und dann (bei Erfolg) hier und evtl. in der Repository zur Verfügung stellen.

  4. #4

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •