Ergebnis 1 bis 4 von 4

Thema: Ausgabe des RSS-Feeds anpassen - <image>-Element in feed.php einbinden

  1. #1
    Contao-Nutzer
    Registriert seit
    14.02.2013.
    Beiträge
    12

    Standard Ausgabe des RSS-Feeds anpassen - <image>-Element in feed.php einbinden

    Hallo in die Runde,

    immer wenn ich meinen RSS-Reader aufmache, um nach dem aktuellen Stand der Dinge zu schauen, bin ich ein bisschen traurig darüber, dass so wenige Webseitenbetreiber Bilder in ihre Feeds einbinden, so dass diese als Vorschaubilder im Reader angezeigt werden. Da ich mich selbst immer wieder dabei erwische, wie ich vorwiegend solche Feeds lese, die mich mit einem Bild - anstelle eines langweiligen grauen Kastens - anlächeln, dachte ich daran, dass es Zeit ist gute Vorsätze in die Tat umzusetzen und ein wenig Hand an den Contao-Core zu legen.

    Bevor ich jedoch auf die Suche nach der richtigen Stelle im Quellcode gegangen bin, wollte ich einmal schauen, welche Möglichkeiten der "RSS-Standard" bietet: http://www.w3schools.com/rss/rss_tag_image.asp. Parallel dazu habe ich mir angeschaut, wie meine Miteiferer vorgegangen sind: Sehr zu meiner Überraschung musste ich feststellen, dass diese das <img>-Element als Teil der description (nicht Contao) eingebunden haben.

    Nachdem also alle Infos vorlagen, habe ich mich auf die Suche nach der betreffenden Datei gemacht und bin in der /contao/system/modules/core/library/Contao/feed.php fündig geworden. Ab Zeile 131 steht dort

    PHP-Code:
    public function generateRss()
        {
            $this->adjustPublicationDate();

            $xml  = '<?xml version="1.0" encoding="' . $GLOBALS['TL_CONFIG']['characterSet'] . '"?>';
            $xml .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
            $xml .= '<channel>';
            $xml .= '<title>' . specialchars($this->title) . '</title>';
            $xml .= '<description>' . specialchars($this->description) . '</description>';
            $xml .= '<link>' . specialchars($this->link) . '</link>';
            $xml .= '<language>' . $this->language . '</language>';
            $xml .= '<pubDate>' . date('r', $this->published) . '</pubDate>';
            $xml .= '<generator>Contao Open Source CMS</generator>';
            $xml .= '<atom:link href="' . specialchars(\Environment::get('base') . $this->strName) . '.xml" rel="self" type="application/rss+xml" />';

            foreach ($this->arrItems as $objItem)
            {
                $xml .= '<item>';
                $xml .= '<title>' . specialchars($objItem->title) . '</title>';
                $xml .= '<description><![CDATA[' . preg_replace('/[\n\r]+/', ' ', $objItem->description) . ']]></description>';
                $xml .= '<link>' . specialchars($objItem->link) . '</link>';
                $xml .= '<pubDate>' . date('r', $objItem->published) . '</pubDate>';
    Da ich mir bzgl. der Syntax sehr unsicher bin, frage ich mich aktuell, wie sich Bilder, die ich in den Teasern verwendet habe, an dieser Stelle einbinden lassen? Wenn ich raten sollte, dann würde ich sagen, dass $objItem sicherlich keine der gewünschten Informationen enthält, so dass man ein $xml .= '<image>'; einfügen könnte, oder?

    Ab Zeile 172 werden die enclosures eingebunden, die im Prinzip den heiß begehrten img-url-pfad beinhalten:

    PHP-Code:
    // Enclosures
                
    if (is_array($objItem->enclosure))
                {
                    foreach (
    $objItem->enclosure as $arrEnclosure)
                    {
                        
    $xml .= '<enclosure url="' $arrEnclosure['url'] . '" length="' $arrEnclosure['length'] . '" type="' $arrEnclosure['type'] . '" />';
                    }
                } 

    Da es sich hierbei jedoch um einen anderen Array handelt, benötige ich ein wenig Hilfe, um nicht gar so sehr zu "quick and dirty" abzudriften, falls es überhaupt möglich ist. Der Feed steht aktuell auf "Export: Teasertexte", was auch so bleiben soll. Die Update(un)sicherheit spielt für mich aufgrund der Installationsgröße vorerst keine Rolle.

    Ich bin für alle Rückmeldungen dankbar!

    Cheers

  2. #2
    Contao-Nutzer
    Registriert seit
    24.04.2012.
    Beiträge
    37

    Standard

    Hallo highjack.

    Hast du bei diesem Thema schon eine Lösung?

    Ich würde in meinem RSS-Feed ebenfalls eingebundene Bilder mit ausgeben lassen.

    Danke und Grüße
    Christian

  3. #3
    Contao-Nutzer
    Registriert seit
    24.04.2012.
    Beiträge
    37

    Standard

    *push*

  4. #4
    Contao-Nutzer
    Registriert seit
    24.04.2012.
    Beiträge
    37

    Standard Lösung

    Da es kein <image> tag pro <item> im RSS 2.0 Standard gibt, habe ich das Bild eines Artikels mit in die <description> geschrieben.

    Also statt

    PHP-Code:
    $xml .= '<description><![CDATA[' preg_replace('/[\n\r]+/'' '$objItem->description) . ']]></description>'
    überprüfe ich alle enclosures nach einem typ "image/jpeg"
    und gebe dann das Bild als <img> mit in den CDATA-Abschnitt des <description>-Tags

    PHP-Code:
    if (is_array($objItem->enclosure))
        {
            foreach (
    $objItem->enclosure as $arrEnclosure)
            {
                if(
    $arrEnclosure['type']==='image/jpeg'){
                
    $xml .= '<description><![CDATA[' preg_replace('/[\n\r]+/'' '$objItem->description) . ' <img src="' $arrEnclosure['url'] . '" width="300"  />'.']]></description>';
                }
            }
        }else{
        
    $xml .= '<description><![CDATA[' preg_replace('/[\n\r]+/'' '$objItem->description) . ']]></description>';
        } 
    Damit wird ein in den Artikelteasern angegebenes Bild unterhalb des Teasertextes eingebunden und im RSS-Reader angezeigt.

    Grüße
    Christian
    Geändert von ChristianLischke (19.02.2015 um 17:37 Uhr)

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
  •