/**
* Create a new template
*
* @param \PageModel $objPage
* @param \LayoutModel $objLayout
*/
protected function createTemplate($objPage, $objLayout)
{
/** @var \FrontendTemplate|object $objTemplate */
$objTemplate = new \FrontendTemplate($objPage->template);
$this->Template = $objTemplate;
$this->Template->viewport = '';
$this->Template->framework = '';
$arrFramework = deserialize($objLayout->framework);
// Generate the CSS framework
if (is_array($arrFramework) && in_array('layout.css', $arrFramework)) {
$strFramework = '';
if (in_array('responsive.css', $arrFramework)) {
$this->Template->viewport = '<meta name="viewport" content="width=device-width,initial-scale=1.0">' . "\n";
}
// Wrapper
if ($objLayout->static) {
$arrSize = deserialize($objLayout->width);
if (isset($arrSize['value']) && $arrSize['value'] != '' && $arrSize['value'] >= 0) {
$arrMargin = array('left' => '0 auto 0 0', 'center' => '0 auto', 'right' => '0 0 0 auto');
$strFramework .= sprintf('#wrapper{width:%s;margin:%s}', $arrSize['value'] . $arrSize['unit'], $arrMargin[$objLayout->align]);
}
}
// Header
if ($objLayout->rows == '2rwh' || $objLayout->rows == '3rw') {
$arrSize = deserialize($objLayout->headerHeight);
if (isset($arrSize['value']) && $arrSize['value'] != '' && $arrSize['value'] >= 0) {
$strFramework .= sprintf('#header{height:%s}', $arrSize['value'] . $arrSize['unit']);
}
}
$strContainer = '';
// Left column
if ($objLayout->cols == '2cll' || $objLayout->cols == '3cl') {
$arrSize = deserialize($objLayout->widthLeft);
if (isset($arrSize['value']) && $arrSize['value'] != '' && $arrSize['value'] >= 0) {
$strFramework .= sprintf('#left{width:%s;right:%s}', $arrSize['value'] . $arrSize['unit'], $arrSize['value'] . $arrSize['unit']);
$strContainer .= sprintf('padding-left:%s;', $arrSize['value'] . $arrSize['unit']);
}
}
// Right column
if ($objLayout->cols == '2clr' || $objLayout->cols == '3cl') {
$arrSize = deserialize($objLayout->widthRight);
if (isset($arrSize['value']) && $arrSize['value'] != '' && $arrSize['value'] >= 0) {
$strFramework .= sprintf('#right{width:%s}', $arrSize['value'] . $arrSize['unit']);
$strContainer .= sprintf('padding-right:%s;', $arrSize['value'] . $arrSize['unit']);
}
}
// Main column
if ($strContainer != '') {
$strFramework .= sprintf('#container{%s}', substr($strContainer, 0, -1));
}
// Footer
if ($objLayout->rows == '2rwf' || $objLayout->rows == '3rw') {
$arrSize = deserialize($objLayout->footerHeight);
if (isset($arrSize['value']) && $arrSize['value'] != '' && $arrSize['value'] >= 0) {
$strFramework .= sprintf('#footer{height:%s}', $arrSize['value'] . $arrSize['unit']);
}
}
// Add the layout specific CSS
if ($strFramework != '') {
$this->Template->framework = \Template::generateInlineStyle($strFramework) . "\n";
}
}
// Overwrite the viewport tag (see #6251)
if ($objLayout->viewport != '') {
$this->Template->viewport = '<meta name="viewport" content="' . $objLayout->viewport . '">' . "\n";
}
$this->Template->mooScripts = '';
// Make sure TL_JAVASCRIPT exists (see #4890)
if (isset($GLOBALS['TL_JAVASCRIPT']) && is_array($GLOBALS['TL_JAVASCRIPT'])) {
$arrAppendJs = $GLOBALS['TL_JAVASCRIPT'];
$GLOBALS['TL_JAVASCRIPT'] = array();
} else {
$arrAppendJs = array();
$GLOBALS['TL_JAVASCRIPT'] = array();
}
$arrPackages = \System::getContainer()->getParameter('kernel.packages');
// jQuery scripts
if ($objLayout->addJQuery) {
if ($objLayout->jSource == 'j_googleapis' || $objLayout->jSource == 'j_fallback') {
if (($strVersion = $arrPackages['contao-components/jquery']) !== null) {
$this->Template->mooScripts .= \Template::generateScriptTag('//code.jquery.com/jquery-' . $strVersion . '.min.js') . "\n";
// Local fallback (thanks to DyaGa)
if ($objLayout->jSource == 'j_fallback') {
$this->Template->mooScripts .= \Template::generateInlineScript('window.jQuery || document.write(\'<script src="' . TL_ASSETS_URL . 'assets/jquery/js/jquery.min.js">\\x3C/script>\')') . "\n";
}
} else {
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/jquery/js/jquery.min.js|static';
}
} else {
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/jquery/js/jquery.min.js|static';
}
}
// MooTools scripts
if ($objLayout->addMooTools) {
if ($objLayout->mooSource == 'moo_googleapis' || $objLayout->mooSource == 'moo_fallback') {
if (($strVersion = $arrPackages['contao-components/mootools']) !== null) {
$this->Template->mooScripts .= \Template::generateScriptTag('//ajax.googleapis.com/ajax/libs/mootools/' . $strVersion . '/mootools-yui-compressed.js') . "\n";
// Local fallback (thanks to DyaGa)
if ($objLayout->mooSource == 'moo_fallback') {
$this->Template->mooScripts .= \Template::generateInlineScript('window.MooTools || document.write(\'<script src="' . TL_ASSETS_URL . 'assets/mootools/js/mootools-core.min.js">\\x3C/script>\')') . "\n";
}
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/js/mootools-more.min.js|static';
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/js/mootools-mobile.min.js|static';
} else {
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/js/mootools.min.js|static';
}
} else {
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/js/mootools.min.js|static';
}
}
// Picturefill
if ($objLayout->picturefill) {
$GLOBALS['TL_JAVASCRIPT'][] = 'assets/respimage/js/respimage.min.js|static';
}
// Check whether TL_APPEND_JS exists (see #4890)
if (!empty($arrAppendJs)) {
$GLOBALS['TL_JAVASCRIPT'] = array_merge($GLOBALS['TL_JAVASCRIPT'], $arrAppendJs);
}
// Initialize the sections
$this->Template->header = '';
$this->Template->left = '';
$this->Template->main = '';
$this->Template->right = '';
$this->Template->footer = '';
// Initialize the custom layout sections
$this->Template->sections = array();
$this->Template->sPosition = $objLayout->sPosition;
// Default settings
$this->Template->layout = $objLayout;
$this->Template->language = $GLOBALS['TL_LANGUAGE'];
$this->Template->charset = \Config::get('characterSet');
$this->Template->base = \Environment::get('base');
$this->Template->disableCron = \Config::get('disableCron');
$this->Template->cronTimeout = $this->getCronTimeout();
$this->Template->isRTL = false;
}