/** * Create a new template * * @param \PageModel $objPage * @param \LayoutModel $objLayout */ protected function createTemplate($objPage, $objLayout) { $blnXhtml = $objPage->outputFormat == 'xhtml'; /** @var \FrontendTemplate|object $objTemplate */ $objTemplate = new \FrontendTemplate($objPage->template); $this->Template = $objTemplate; // Generate the DTD if ($blnXhtml) { if ($objPage->outputVariant == 'strict') { $this->Template->doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n"; } else { $this->Template->doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . "\n"; } } $arrFramework = deserialize($objLayout->framework); $this->Template->viewport = ''; $this->Template->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"' . ($blnXhtml ? ' />' : '>') . "\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, $blnXhtml) . "\n"; } } // Overwrite the viewport tag (see #6251) if ($objLayout->viewport != '') { $this->Template->viewport = '<meta name="viewport" content="' . $objLayout->viewport . '"' . ($blnXhtml ? ' />' : '>') . "\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(); } // jQuery scripts if ($objLayout->addJQuery) { if ($objLayout->jSource == 'j_googleapis' || $objLayout->jSource == 'j_fallback') { $this->Template->mooScripts .= \Template::generateScriptTag('//code.jquery.com/jquery-' . $GLOBALS['TL_ASSETS']['JQUERY'] . '.min.js', $blnXhtml) . "\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/core/' . $GLOBALS['TL_ASSETS']['JQUERY'] . '/jquery.min.js">\\x3C/script>\')', $blnXhtml) . "\n"; } } else { $GLOBALS['TL_JAVASCRIPT'][] = 'assets/jquery/core/' . $GLOBALS['TL_ASSETS']['JQUERY'] . '/jquery.min.js|static'; } } // MooTools scripts if ($objLayout->addMooTools) { if ($objLayout->mooSource == 'moo_googleapis' || $objLayout->mooSource == 'moo_fallback') { $this->Template->mooScripts .= \Template::generateScriptTag('//ajax.googleapis.com/ajax/libs/mootools/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools-yui-compressed.js', $blnXhtml) . "\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/core/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools-core.js">\\x3C/script>\')', $blnXhtml) . "\n"; } $GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/core/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools-more.js|static'; $GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/core/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools-mobile.js|static'; } else { $GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/core/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools.js|static'; } } // Load MooTools core for the debug bar (see #5195) if (\Config::get('debugMode') && !$objLayout->addMooTools) { $GLOBALS['TL_JAVASCRIPT'][] = 'assets/mootools/core/' . $GLOBALS['TL_ASSETS']['MOOTOOLS'] . '/mootools-core.js|static'; } // Picturefill if ($objLayout->picturefill) { $GLOBALS['TL_JAVASCRIPT'][] = 'assets/respimage/' . $GLOBALS['TL_ASSETS']['RESPIMAGE'] . '/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; }