PHP-Code:
protected $strJSFile = 'plugins/slideshow2/js/slideshow.js';
protected $strCSSFile = 'plugins/slideshow2/css/slideshow.css';
protected $thumbWidth = 100;
protected $thumbHeight = 50;
protected function parseArticles(Database_Result $objArticles, $blnAddArchive=false)
{
if ($objArticles->numRows < 1)
{
return array();
}
$this->import('String');
$arrArticles = array();
$limit = $objArticles->numRows;
$count = 0;
$imgSize = false;
// Override the default image size
if ($this->imgSize != '')
{
$size = deserialize($this->imgSize);
if ($size[0] > 0 || $size[1] > 0)
{
$imgSize = $this->imgSize;
}
}
while ($objArticles->next())
{
$objTemplate = new FrontendTemplate($this->news_template);
$objTemplate->setData($objArticles->row());
$objTemplate->count = ++$count;
$objTemplate->class = (strlen($objArticles->cssClass) ? ' ' . $objArticles->cssClass : '') . (($count == 1) ? ' first' : '') . (($count == $limit) ? ' last' : '') . ((($count % 2) == 0) ? ' odd' : ' even');
$objTemplate->newsHeadline = $objArticles->headline;
$objTemplate->subHeadline = $objArticles->subheadline;
$objTemplate->hasSubHeadline = $objArticles->subheadline ? true : false;
$objTemplate->linkHeadline = $this->generateLink($objArticles->headline, $objArticles, $blnAddArchive);
$objTemplate->more = $this->generateLink($GLOBALS['TL_LANG']['MSC']['more'], $objArticles, $blnAddArchive, true);
$objTemplate->link = $this->generateNewsUrl($objArticles, $blnAddArchive);
$objTemplate->archive = $objArticles->archive;
// Display the "read more" button for external/article links
if (($objArticles->source == 'external' || $objArticles->source == 'article') && !strlen($objArticles->text))
{
$objTemplate->text = true;
}
// Encode e-mail addresses
else
{
// Clean RTE output
$objTemplate->text = str_ireplace
(
array('<u>', '</u>', '</p>', '<br /><br />', ' target="_self"'),
array('<span style="text-decoration:underline;">', '</span>', "</p>\n", "<br /><br />\n", ''),
$this->String->encodeEmail($objArticles->text)
);
}
$arrMeta = $this->getMetaFields($objArticles);
// Add meta information
$objTemplate->date = $arrMeta['date'];
$objTemplate->hasMetaFields = count($arrMeta) ? true : false;
$objTemplate->numberOfComments = $arrMeta['ccount'];
$objTemplate->commentCount = $arrMeta['comments'];
$objTemplate->timestamp = $objArticles->date;
$objTemplate->author = $arrMeta['author'];
$objTemplate->addImage = false;
// Add an image
if ($objArticles->addImage && is_file(TL_ROOT . '/' . $objArticles->singleSRC))
{
if ($imgSize)
{
$objArticles->size = $imgSize;
}
$this->addImageToTemplate($objTemplate, $objArticles->row());
}
$objTemplate->enclosure = array();
// Add enclosures
if ($objArticles->addEnclosure)
{
$this->addEnclosuresToTemplate($objTemplate, $objArticles->row());
}
// HOOK: add custom logic
if (isset($GLOBALS['TL_HOOKS']['parseArticles']) && is_array($GLOBALS['TL_HOOKS']['parseArticles']))
{
foreach ($GLOBALS['TL_HOOKS']['parseArticles'] as $callback)
{
$this->import($callback[0]);
$this->$callback[0]->$callback[1]($objTemplate, $objArticles->row());
}
}
//-- Create Data Arrays
$objSettings = $this->Database->prepare("SELECT * FROM tl_slideshow2 WHERE id=?")
->execute($objArticles->slideshow2);
$objElements = $this->Database->prepare("SELECT * FROM tl_slideshow2_elements WHERE pid=? ORDER by sorting ASC")
->execute($objArticles->slideshow2);
//-- Prepare Data
$arrSlideshow2Size = unserialize($objSettings->slideshow2_size);
if($objSettings->thumbnails)
$arrSlideshow2ThumbSize = unserialize($objSettings->thumbnails_size);
$GLOBALS['TL_JAVASCRIPT'][] = $this->strJSFile;
$GLOBALS['TL_CSS'][] = $this->strCSSFile;
/** --------------------------------------------------------------------
* Generate HTML Image Array
* -------------------------------------------------------------------- */
//-- Reset Variables
$x = 0;
$url_link = false;
$url_fullsize = false;
//-- Get Data from all selected elements
while ($objElements->next())
{
if (strncmp($objElements->src, '.', 1) === 0)
{
continue;
}
/** --------------------------------------------------------------------
* img_src is Directory
* -------------------------------------------------------------------- */
if (is_dir(TL_ROOT . '/' . $objElements->src))
{
$subfiles = scan(TL_ROOT . '/' . $objElements->src);
foreach ($subfiles as $subfile)
{
if (strncmp($subfile, '.', 1) === 0 || is_dir(TL_ROOT . '/' . $objElements->src . '/' . $subfile))
{
continue;
}
$objFile = new File($objElements->src . '/' . $subfile);
if ($objFile->isGdImage)
{
//-- Imagenumber
$arrElements[$x]['id'] = $x;
//-- Thumbnails
if ($objSettings->thumbnails)
{
$arrElements[$x]['thumb_src'] = $this->getImage($objElements->src . '/' . $subfile, $arrSlideshow2ThumbSize[0], $arrSlideshow2ThumbSize[1]);
$arrElements[$x]['thumb_size'] = $arrSlideshow2ThumbSize;
}
//-- Image resizing
if ($objElements->img)
{
$arrElements[$x]['img_size'] = unserialize($objElements->img_size);
$arrElements[$x]['src'] = $this->getImage($objElements->src . '/' . $subfile, $arrElements[$x]['img_size'][0], $arrElements[$x]['img_size'][1]);
}
else
{
$arrElements[$x]['img_size'] = array($objFile->width,$objFile->height);
$arrElements[$x]['src'] = $objElements->src . '/' . $subfile;
}
//-- Link
$arrElements[$x]['url'] = $objElements->url;
if ($objElements->url_link && $objElements->url)
{
$arrElements[$x]['url_link'] = ($objElements->url_link);
$arrElements[$x]['url_title'] = $objElements->url_title;
$arrElements[$x]['url_window'] = $objElements->url_window;
$arrElements[$x]['url_fullsize'] = false;
$url_link = true;
}
elseif ($objElements->url_fullsize && $objElements->url)
{
$arrElements[$x]['url_link'] = $objElements->src . '/' . $subfile;
$arrElements[$x]['url_fullsize'] = true;
$url_fullsize = true;
}
// Description and alt
if ($objSettings->captions_meta)
{
//-- Use Typolight Function to parse meta
$this->parseMetaFile($objElements->src);
$arrMeta = $this->arrMeta[$objFile->basename];
// Take filename if there is no meta info for that file
if ($arrMeta[2] == '')
$arrMeta[0] = str_replace('_', ' ', preg_replace('/^[0-9]+_/', '', $objFile->filename));
$arrElements[$x]['description'] = $arrMeta[0];
$arrElements[$x]['alt'] = $arrMeta[0];
}
else
{
$arrElements[$x]['description'] = $objElements->description;
$arrElements[$x]['alt'] = $objElements->alt;
}
//-- count image
$x++;
}
}
continue;
}
/** --------------------------------------------------------------------
* img_src is File
* -------------------------------------------------------------------- */
if (is_file(TL_ROOT . '/' . $objElements->src))
{
$objFile = new File($objElements->src);
if ($objFile->isGdImage)
{
//-- Imagenumber
$arrElements[$x]['id'] = $x;
//-- Thumbnails
if ($objSettings->thumbnails)
{
$arrElements[$x]['thumb_src'] = $this->getImage($objElements->src, $arrSlideshow2ThumbSize[0], $arrSlideshow2ThumbSize[1]);
$arrElements[$x]['thumb_size'] = unserialize($objSettings->thumbnails_size);
}
//-- Image resizing
if ($objElements->img)
{
$arrElements[$x]['img_size'] = unserialize($objElements->img_size);
$arrElements[$x]['src'] = $this->getImage($objElements->src, $arrElements[$x]['img_size'][0], $arrElements[$x]['img_size'][1]);
}
else
{
$arrElements[$x]['img_size'] = array($objFile->width,$objFile->height);
$arrElements[$x]['src'] = $objElements->src;
}
//-- Link
$arrElements[$x]['url'] = $objElements->url;
if ($objElements->url_link && $objElements->url)
{
$arrElements[$x]['url_link'] = ($objElements->url_link);
$arrElements[$x]['url_title'] = $objElements->url_title;
$arrElements[$x]['url_window'] = $objElements->url_window;
$arrElements[$x]['url_fullsize'] = false;
$url_link = true;
}
elseif ($objElements->url_fullsize && $objElements->url)
{
$arrElements[$x]['url_link'] = $objElements->src;
$arrElements[$x]['url_fullsize'] = true;
$url_fullsize = true;
}
//echo dirname($objElements->src);
// Description with or without meta file
if ($objSettings->captions_meta)
{
//-- Use Typolight Function to parse meta
$this->parseMetaFile(dirname($objElements->src));
$arrMeta = $this->arrMeta[$objFile->basename];
//print_r($arrMeta);
// Take filename if there is no meta info for that file
if ($arrMeta[2] == '')
$arrMeta[0] = str_replace('_', ' ', preg_replace('/^[0-9]+_/', '', $objFile->filename));
$arrElements[$x]['description'] = $arrMeta[0];
$arrElements[$x]['alt'] = $arrMeta[0];
}
else
{
$arrElements[$x]['description'] = $objElements->description;
$arrElements[$x]['alt'] = $objElements->alt;
}
//-- count image
$x++;
}
}
}
/** --------------------------------------------------------------------
* CSS Template
* --------------------------------------------------------------------*/
/* Create CSS Template */
$objTplCSS = new FrontendTemplate($objSettings->template_css);
$objTplCSS->id = $objSettings->id;
$objTplCSS->arrSlideshow2Size = $arrSlideshow2Size;
$objTplCSS->arrSlideshow2ThumbSize = $arrSlideshow2ThumbSize;
$objTplCSS->totalElements = count($arrElements)+1;
if ($objSettings->controls) $objTplCSS->controls = true;
if ($objSettings->captions) $objTplCSS->captions = true;
if ($objSettings->thumbnails)
{
$objTplCSS->thumbnails = true;
$objTplCSS->ThumbsAdditionalHeight = 10;
$objTplCSS->thumbnails_overlay = ($objSettings->thumbnails_overlay)? true : false ;
}
if ($objSettings->play_image)
{
$play_number = ($objSettings->play_random)? mt_rand(0, count($arrElements)-1) : 0 ;
$objTplCSS->play_image = $arrElements[$play_number]['src'];
}
//print_r($objTplCSS);
/* Add CSS in HTML head */
$GLOBALS['TL_HEAD'][] ='<style type="text/css" media="screen">
<!--/*--><![CDATA[/*><!--*/
' . str_replace(array("\r\n", "\n", "\r", "\t"), "", $objTplCSS->parse()) . '
/*]]>*/--></style>';
/** --------------------------------------------------------------------
* JS Template
* --------------------------------------------------------------------*/
//-- Create Image Array
$elementsTotal = count($arrElements);
$x = 1;
foreach ($arrElements as $element)
{
//-- Additional image data (Thumbnail and link)
if ($objSettings->thumbnails) $imgExtended = ",thumbnail:'" . $element['thumb_src'] . "'";
//if ($objSettings->thumbnails) $imgExtended = ",thumbnail:'1'";
if ($objElements->url_link && $objElements->url) $imgExtended .= ",href:'" . $element['url_link'] . "'";
$imgElements .= "'" . $element['src']. "':{caption:'" . str_replace('/', '\/', $element['description']) . "'" . $imgExtended . "}";
if ($x != $elementsTotal) $imgElements .= ",";
$x++;
}
//-- Type
if ($objSettings->effect_type != 'Alpha')
{
$EffectType = '.' . $objSettings->effect_type;
$GLOBALS['TL_JAVASCRIPT'][] = 'plugins/slideshow2/js/slideshow.' . strtolower($objSettings->effect_type) . '.js';
}
//-- Extended
if ($objSettings->effects_extended)
{
$EffectsExtended = 'transition: \'' . strtolower($objSettings->effect_transition) . ':' . $objSettings->effect_ease . '\',';
}
//-- Create JS Template
$objTplJS = new FrontendTemplate($objSettings->template_js);
$objTplJS->id = $objSettings->id;
$objTplJS->imgElements = $imgElements;
$objTplJS->arrSlideshow2Size = $arrSlideshow2Size;
$objTplJS->EffectType = $EffectType;
$objTplJS->effect_duration = $objSettings->effect_duration;
$objTplJS->EffectsExtended = $EffectsExtended;
$objTplJS->rotation_interval = $objSettings->rotation_interval;
$objTplJS->controls_type = $objSettings->controls_type;
$objTplJS->play_loop = ($objSettings->play_loop)? 'false' : 'true' ;
$objTplJS->play_paused = ($objSettings->play_paused)? 'true' : 'false' ;
$objTplJS->play_random = ($objSettings->play_random)? 'true' : 'false' ;
$objTplJS->controls = ($objSettings->controls)? 'true' : 'false' ;
$objTplJS->thumbnails = ($objSettings->thumbnails)? 'true' : 'false' ;
$objTplJS->captions = ($objSettings->captions)? 'true' : 'false' ;
$objTplJS->thumbnails_overlay = ($objSettings->thumbnails_overlay)? true : false ;
// Add Lightbox if only lightbox links are in array
if (!$url_fullsize && $url_link || $url_fullsize && $url_link)
{
$objTplJS->linked = 'linked: true,';
}
else if ($url_fullsize && !$url_link)
{
$objTplJS->linked = 'linked: true,';
$objTplJS->fullsize = true;
}
/* Add JS in HTML head */
$GLOBALS['TL_HEAD'][] = "<script type=\"text/javascript\">
<!--//--><![CDATA[//><!--
window.addEvent('domready',function(){" . str_replace(array("\r\n", "\n", "\r", "\t"), "", $objTplJS->parse()) . "});
//--><!]]>
</script>";
/** --------------------------------------------------------------------
* mod_slideshow2 template
* -------------------------------------------------------------------- */
$objTemplate->fullsize1 = $url_fullsize;
$objTemplate->id1 = $objSettings->id;
$objTemplate->element1 = $arrElements[0];
$arrArticles[] = $objTemplate->parse();
}
return $arrArticles;
}
Dann nur noch das Template anpassen und es funktioniert.
Lesezeichen