<?php /** * Slick slider for Contao * * Copyright (c) 2016 Benjamin Roth * * @license LGPL-3.0+ */ namespace eSM_slick; /** * Front end content element slick slider start. */ class ContentSlickSliderImage extends \ContentElement { /** * Template * @var string */ protected $strTemplate = 'ce_slick_slider_image'; /** * @return string */ public function generate() { if (TL_MODE == 'BE') { $return = ''; if ($this->singleSRC) { $objFile = \FilesModel::findByUuid($this->singleSRC); if ($objFile !== null && is_file(TL_ROOT . '/' . $objFile->path)) { $src = \System::getContainer()->get('contao.image.image_factory')->create(TL_ROOT . '/' . $objFile->path, array(100,40,'crop'))->getUrl(TL_ROOT); $return = '<img src="'.$src.'">'; } } return $return; } return parent::generate(); } /** * Generate the content element */ protected function compile() { if (TL_MODE == 'BE') { $this->strTemplate = 'be_wildcard'; /** @var \BackendTemplate|object $objTemplate */ $objTemplate = new \BackendTemplate($this->strTemplate); $this->Template = $objTemplate; } if ($this->singleSRC) { $objFile = \FilesModel::findByUuid($this->singleSRC); if ($objFile !== null && is_file(TL_ROOT . '/' . $objFile->path)) { $this->singleSRC = $objFile->path; $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size)); $backgroundStyle = ''; if ($this->eSM_slick_minHeight) { if ($this->eSM_slick_bgSize && $this->eSM_slick_bgSize == 'auto auto') { $minHeight = $this->Template->picture['img']['height'] . 'px'; } else { $minHeight = round($this->Template->picture['img']['height'] / $this->Template->picture['img']['width'] * 100) . '%'; } $backgroundStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }'; } $backgroundStyle .= '.slide_'.$this->id.' .slick-slider-slide-image { background-image: url(\''.$this->Template->src.'\');'; if ($this->eSM_slick_bgSize) { $backgroundStyle .= 'background-size: ' . $this->eSM_slick_bgSize . ';'; } else { $backgroundStyle .= 'background-size: cover;'; } if ($this->eSM_slick_bgPosition) { $backgroundStyle .= 'background-position: ' . $this->eSM_slick_bgPosition . ';'; } else { $backgroundStyle .= 'background-position: 0 0;'; } if ($this->eSM_slick_bgOpacity) { $backgroundStyle .= 'opacity:' . $this->eSM_slick_bgOpacity/100 . ';'; } if ($this->eSM_slick_bgRepeat) { $backgroundStyle .= 'background-repeat: ' . $this->eSM_slick_bgRepeat . ';'; } $this->Template->backgroundStyle = $backgroundStyle.' }'; // Responsive handling if ($this->Template->picture['sources'] && is_array($this->Template->picture['sources'])) { $backgroundStyleResponsive = ''; foreach ($this->Template->picture['sources'] as $srcSet) { $srcSetStyle = '.slide_'.$this->id.' .slick-slider-slide-image { background-image: url(\''.$srcSet['src'].'\'); }'; if ($this->eSM_slick_minHeight) { if ($this->eSM_slick_bgSize && $this->eSM_slick_bgSize == 'auto auto') { $minHeight = $srcSet['height'] . 'px'; } else { $minHeight = round($srcSet['height'] / $srcSet['width'] * 100) . '%'; } $srcSetStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }'; } $backgroundStyleResponsive .= '@media screen and '.$srcSet['media'].' { '.$srcSetStyle.' }'; } $this->Template->backgroundStyleResponsive = $backgroundStyleResponsive; } } } $this->Template->text = nl2br($this->eSM_slick_text); } }