catalog - RSS Feed - Felder

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hensmatt
    Contao-Nutzer
    • 18.11.2010
    • 72

    #1

    catalog - RSS Feed - Felder

    Hallo,

    wir nutzen den Contao Catalog für Rezepte, diese wollten wir jetzt auch als RSS Feed anbieten.
    Leider besteht der Feed aber nur aus dem Titel und der Rezeptbeschreibung.
    Bilder oder Zutaten erscheinen nicht im Feed.



    Im an den Post abgehangenen Screenshot kann man das Rezeptbild im Dropdown auch nicht auswählen.
    Das würde aber auch nichts bringen, da ja keine Mehrfachauswahl möglich ist.

    Oder kann man noch an anderer Stelle steuern welche Felder im RSS-Feed erscheinen?


    Grüße Matthias
    Angehängte Dateien
    matthiashensel.com
  • MacKP
    Contao-Yoda
    • 15.06.2009
    • 13315

    #2
    Hallo hensmatt,
    da der Catalog auch nur den Generator von Contao nutzt, ist da erst mal nicht mehr vorgesehen. Da werdet ihr eine eigene mini-Erweiterung für machen müssen.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

    Kommentar

    • cyberjuls
      Contao-Nutzer
      • 28.11.2011
      • 15

      #3
      Hallo bin ich gerade auf der gleiche problem bekommen.

      Keine idee wie kann mann das machen?

      Kommentar

      • cyberjuls
        Contao-Nutzer
        • 28.11.2011
        • 15

        #4
        Hier ist der CatalogExt.php die generiert der RSS feed. Keine idee wie ich kann ein bild von der catalog im eine enclosure transformiren.

        PHP-Code:
        protected function generateFiles(Database_Result $arrCatalog)
            {
                // If we do not have a table name, we can not work.
                // This should not happen under normal circumstances but as issue #57 proves, it can happen
                // when activating RSS before saving the catalog.
                if(!strlen($arrCatalog->tableName))
                    return;
                    
                $time = time();
                $strType = ($arrCatalog->feedFormat == 'atom') ? 'generateAtom' : 'generateRss';
                $strLink = strlen($arrCatalog->feedBase) ? $arrCatalog->feedBase : $this->Environment->base;
                $strFile = $arrCatalog->feedName;
        
                $objFeed = new Feed($strFile);
        
                $objFeed->link = $strLink;
                $objFeed->title = $arrCatalog->feedTitle;
                $objFeed->description = $arrCatalog->description;
                $objFeed->language = $arrCatalog->language;
                $objFeed->published = $arrCatalog->tstamp;
        
                // Get default URL
                $objParent = $this->Database->prepare("SELECT id, alias FROM tl_page WHERE id=?")
                                            ->limit(1)
                                            ->execute($arrCatalog->jumpTo);
        
                $strUrl = $this->generateFrontendUrl($objParent->fetchAssoc(), '/items/%s');
        
                // Get items
                $this->import('String');
                $where = $this->String->decodeEntities($objArchive->searchCondition);
                if(strlen($arrCatalog->publishField))
                {
                    $where.=(strlen($where)? ' AND ':'').$arrCatalog->publishField.'=1';
                }
                $datefield=(strlen($arrCatalog->datesource) ? $arrCatalog->datesource : 'tstamp');
                $objArticleStmt = $this->Database->prepare("SELECT * FROM " . $arrCatalog->tableName . " WHERE pid=? ".(strlen($where)? " AND ".$where : "")." ORDER BY " . $datefield . " DESC");
        
                if ($arrCatalog->maxItems > 0)
                {
                    $objArticleStmt->limit($arrCatalog->maxItems);
                }
        
                $objArticle = $objArticleStmt->execute($arrCatalog->id);
        
                // Parse items
                while ($objArticle->next())
                {
                    $objItem = new FeedItem();
                    $objItem->title = $objArticle->{$arrCatalog->titleField};
                    $objItem->description = (strlen($arrCatalog->source) ? $objArticle->{$arrCatalog->source} : '');
                    $objItem->link = $strLink . $this->getLink($arrCatalog->jumpTo, $objArticle, $strUrl, $arrCatalog->aliasField);
                    $objItem->published = $objArticle->$datefield;
                    $objFeed->addItem($objItem);
                }
                
                // Create file
                $objRss = new File($strFile . '.xml');
                $objRss->write($this->replaceInsertTags($objFeed->$strType()));
                $objRss->close();
            } 
        


        Hier ist der Feed.php (nur RRS wo man kann sehen wie der RSS generator macht eine enclosure (bild) ins der XML file.

        PHP-Code:
            /**
             * Generate an RSS 2.0 feed and return it as XML string
             * @return string
             */
            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($this->Environment->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>';
                    $xml .= '<guid>' . ($objItem->guid ? $objItem->guid : specialchars($objItem->link)) . '</guid>';
        
                    // Enclosures
                    if (is_array($objItem->enclosure))
                    {
                        foreach ($objItem->enclosure as $arrEnclosure)
                        {
                            $xml .= '<enclosure url="' . $arrEnclosure['url'] . '" length="' . $arrEnclosure['length'] . '" type="' . $arrEnclosure['type'] . '" />';
                        }
                    }
        
                    $xml .= '</item>';
                }
        
                $xml .= '</channel>';
                $xml .= '</rss>';
        
                return $xml;
            }

        Kommentar

        Lädt...