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;
}
Lesezeichen