Файл: contao-3.5.8/system/modules/core/elements/ContentElement.php
Строк: 236
<?php
/**
* Contao Open Source CMS
*
* Copyright (c) 2005-2016 Leo Feyer
*
* @license LGPL-3.0+
*/
namespace Contao;
/**
* Parent class for content elements.
*
* @property integer $id
* @property integer $pid
* @property string $ptable
* @property integer $sorting
* @property integer $tstamp
* @property string $type
* @property string $headline
* @property string $text
* @property boolean $addImage
* @property string $singleSRC
* @property string $alt
* @property string $title
* @property string $size
* @property string $imagemargin
* @property string $imageUrl
* @property boolean $fullsize
* @property string $caption
* @property string $floating
* @property string $html
* @property string $listtype
* @property string $listitems
* @property string $tableitems
* @property string $summary
* @property boolean $thead
* @property boolean $tfoot
* @property boolean $tleft
* @property boolean $sortable
* @property integer $sortIndex
* @property string $sortOrder
* @property string $mooHeadline
* @property string $mooStyle
* @property string $mooClasses
* @property string $highlight
* @property string $shClass
* @property string $code
* @property string $url
* @property boolean $target
* @property string $titleText
* @property string $linkTitle
* @property string $embed
* @property string $rel
* @property boolean $useImage
* @property string $multiSRC
* @property string $orderSRC
* @property boolean $useHomeDir
* @property integer $perRow
* @property integer $perPage
* @property integer $numberOfItems
* @property string $sortBy
* @property boolean $metaIgnore
* @property string $galleryTpl
* @property string $customTpl
* @property string $playerSRC
* @property string $youtube
* @property string $posterSRC
* @property string $playerSize
* @property boolean $autoplay
* @property integer $sliderDelay
* @property integer $sliderSpeed
* @property integer $sliderStartSlide
* @property boolean $sliderContinuous
* @property integer $cteAlias
* @property integer $articleAlias
* @property integer $article
* @property integer $form
* @property integer $module
* @property boolean $protected
* @property string $groups
* @property boolean $guests
* @property string $cssID
* @property string $space
* @property boolean $invisible
* @property string $start
* @property string $stop
* @property string $com_order
* @property integer $com_perPage
* @property boolean $com_moderate
* @property boolean $com_bbcode
* @property boolean $com_disableCaptcha
* @property boolean $com_requireLogin
* @property string $com_template
* @property string $classes
* @property string $typePrefix
* @property integer $origId
* @property string $origSpace
* @property string $origCssID
* @property string $hl
*
* @author Leo Feyer <https://github.com/leofeyer>
*/
abstract class ContentElement extends Frontend
{
/**
* Template
* @var string
*/
protected $strTemplate;
/**
* Column
* @var string
*/
protected $strColumn;
/**
* Model
* @var ContentElement
*/
protected $objModel;
/**
* Current record
* @var array
*/
protected $arrData = array();
/**
* Processed folders
* @var array
*/
protected $arrProcessed = array();
/**
* Style array
* @var array
*/
protected $arrStyle = array();
/**
* Initialize the object
*
* @param ContentModel $objElement
* @param string $strColumn
*/
public function __construct($objElement, $strColumn='main')
{
if ($objElement instanceof Model)
{
$this->objModel = $objElement;
}
elseif ($objElement instanceof ModelCollection)
{
$this->objModel = $objElement->current();
}
parent::__construct();
$this->arrData = $objElement->row();
$this->space = deserialize($objElement->space);
$this->cssID = deserialize($objElement->cssID, true);
if ($this->customTpl != '' && TL_MODE == 'FE')
{
$this->strTemplate = $this->customTpl;
}
$arrHeadline = deserialize($objElement->headline);
$this->headline = is_array($arrHeadline) ? $arrHeadline['value'] : $arrHeadline;
$this->hl = is_array($arrHeadline) ? $arrHeadline['unit'] : 'h1';
$this->strColumn = $strColumn;
}
/**
* Set an object property
*
* @param string $strKey
* @param mixed $varValue
*/
public function __set($strKey, $varValue)
{
$this->arrData[$strKey] = $varValue;
}
/**
* Return an object property
*
* @param string $strKey
*
* @return mixed
*/
public function __get($strKey)
{
if (isset($this->arrData[$strKey]))
{
return $this->arrData[$strKey];
}
return parent::__get($strKey);
}
/**
* Check whether a property is set
*
* @param string $strKey
*
* @return boolean
*/
public function __isset($strKey)
{
return isset($this->arrData[$strKey]);
}
/**
* Return the model
*
* @return Model
*/
public function getModel()
{
return $this->objModel;
}
/**
* Parse the template
*
* @return string
*/
public function generate()
{
if (TL_MODE == 'FE' && !BE_USER_LOGGED_IN && ($this->invisible || ($this->start != '' && $this->start > time()) || ($this->stop != '' && $this->stop < time())))
{
return '';
}
if ($this->arrData['space'][0] != '')
{
$this->arrStyle[] = 'margin-top:'.$this->arrData['space'][0].'px;';
}
if ($this->arrData['space'][1] != '')
{
$this->arrStyle[] = 'margin-bottom:'.$this->arrData['space'][1].'px;';
}
$this->Template = new FrontendTemplate($this->strTemplate);
$this->Template->setData($this->arrData);
$this->compile();
// Do not change this order (see #6191)
$this->Template->style = !empty($this->arrStyle) ? implode(' ', $this->arrStyle) : '';
$this->Template->class = trim('ce_' . $this->type . ' ' . $this->cssID[1]);
$this->Template->cssID = ($this->cssID[0] != '') ? ' id="' . $this->cssID[0] . '"' : '';
$this->Template->inColumn = $this->strColumn;
if ($this->Template->headline == '')
{
$this->Template->headline = $this->headline;
}
if ($this->Template->hl == '')
{
$this->Template->hl = $this->hl;
}
if (!empty($this->objModel->classes) && is_array($this->objModel->classes))
{
$this->Template->class .= ' ' . implode(' ', $this->objModel->classes);
}
return $this->Template->parse();
}
/**
* Compile the content element
*/
abstract protected function compile();
/**
* Find a content element in the TL_CTE array and return the class name
*
* @param string $strName The content element name
*
* @return string The class name
*/
public static function findClass($strName)
{
foreach ($GLOBALS['TL_CTE'] as $v)
{
foreach ($v as $kk=>$vv)
{
if ($kk == $strName)
{
return $vv;
}
}
}
return '';
}
}