Inheritance: extends Model
Beispiel #1
0
 /**
  * @param $module
  * @return array
  */
 protected function generateModule($module)
 {
     $class = $module['cssClass'];
     if ($module['floating']) {
         if ($class != '') {
             $class .= ' ';
         }
         $class .= 'navbar-' . $module['floating'];
     }
     $model = ModuleModel::findByPk($module['module']);
     $model->bootstrap_inNavbar = true;
     $model->bootstrap_navbarFloating = $module['floating'];
     $rendered = $this->getFrontendModule($model);
     return array('type' => 'module', 'module' => $rendered, 'id' => $module['module'], 'class' => $class);
 }
Beispiel #2
0
 /**
  * Generate a front end module and return it as string
  *
  * @param mixed  $intId     A module ID or a Model object
  * @param string $strColumn The name of the column
  *
  * @return string The module HTML markup
  */
 public static function getFrontendModule($intId, $strColumn = 'main')
 {
     if (!is_object($intId) && !strlen($intId)) {
         return '';
     }
     /** @var \PageModel $objPage */
     global $objPage;
     // Articles
     if (!is_object($intId) && $intId == 0) {
         // Show a particular article only
         if ($objPage->type == 'regular' && \Input::get('articles')) {
             list($strSection, $strArticle) = explode(':', \Input::get('articles'));
             if ($strArticle === null) {
                 $strArticle = $strSection;
                 $strSection = 'main';
             }
             if ($strSection == $strColumn) {
                 $objArticle = \ArticleModel::findByIdOrAliasAndPid($strArticle, $objPage->id);
                 // Send a 404 header if the article does not exist
                 if (null === $objArticle) {
                     throw new PageNotFoundException('Page not found');
                 }
                 // Add the "first" and "last" classes (see #2583)
                 $objArticle->classes = array('first', 'last');
                 return static::getArticle($objArticle);
             }
         }
         // HOOK: add custom logic
         if (isset($GLOBALS['TL_HOOKS']['getArticles']) && is_array($GLOBALS['TL_HOOKS']['getArticles'])) {
             foreach ($GLOBALS['TL_HOOKS']['getArticles'] as $callback) {
                 $return = static::importStatic($callback[0])->{$callback}[1]($objPage->id, $strColumn);
                 if (is_string($return)) {
                     return $return;
                 }
             }
         }
         // Show all articles (no else block here, see #4740)
         $objArticles = \ArticleModel::findPublishedByPidAndColumn($objPage->id, $strColumn);
         if ($objArticles === null) {
             return '';
         }
         $return = '';
         $intCount = 0;
         $blnMultiMode = $objArticles->count() > 1;
         $intLast = $objArticles->count() - 1;
         while ($objArticles->next()) {
             /** @var \ArticleModel $objRow */
             $objRow = $objArticles->current();
             // Add the "first" and "last" classes (see #2583)
             if ($intCount == 0 || $intCount == $intLast) {
                 $arrCss = array();
                 if ($intCount == 0) {
                     $arrCss[] = 'first';
                 }
                 if ($intCount == $intLast) {
                     $arrCss[] = 'last';
                 }
                 $objRow->classes = $arrCss;
             }
             $return .= static::getArticle($objRow, $blnMultiMode, false, $strColumn);
             ++$intCount;
         }
         return $return;
     } else {
         if (is_object($intId)) {
             $objRow = $intId;
         } else {
             $objRow = \ModuleModel::findByPk($intId);
             if ($objRow === null) {
                 return '';
             }
         }
         // Check the visibility (see #6311)
         if (!static::isVisibleElement($objRow)) {
             return '';
         }
         $strClass = \Module::findClass($objRow->type);
         // Return if the class does not exist
         if (!class_exists($strClass)) {
             static::log('Module class "' . $strClass . '" (module "' . $objRow->type . '") does not exist', __METHOD__, TL_ERROR);
             return '';
         }
         $objRow->typePrefix = 'mod_';
         /** @var \Module $objModule */
         $objModule = new $strClass($objRow, $strColumn);
         $strBuffer = $objModule->generate();
         // HOOK: add custom logic
         if (isset($GLOBALS['TL_HOOKS']['getFrontendModule']) && is_array($GLOBALS['TL_HOOKS']['getFrontendModule'])) {
             foreach ($GLOBALS['TL_HOOKS']['getFrontendModule'] as $callback) {
                 $strBuffer = static::importStatic($callback[0])->{$callback}[1]($objRow, $strBuffer, $objModule);
             }
         }
         // Disable indexing if protected
         if ($objModule->protected && !preg_match('/^\\s*<!-- indexer::stop/', $strBuffer)) {
             $strBuffer = "\n<!-- indexer::stop -->" . $strBuffer . "<!-- indexer::continue -->\n";
         }
         return $strBuffer;
     }
 }
 /**
  * Generate a regular page
  *
  * @param \PageModel $objPage
  *
  * @internal
  */
 protected function prepare($objPage)
 {
     $GLOBALS['TL_KEYWORDS'] = '';
     $GLOBALS['TL_LANGUAGE'] = $objPage->language;
     $locale = str_replace('-', '_', $objPage->language);
     \System::getContainer()->get('request_stack')->getCurrentRequest()->setLocale($locale);
     \System::getContainer()->get('translator')->setLocale($locale);
     \System::loadLanguageFile('default');
     // Static URLs
     $this->setStaticUrls();
     // Get the page layout
     $objLayout = $this->getPageLayout($objPage);
     // HOOK: modify the page or layout object (see #4736)
     if (isset($GLOBALS['TL_HOOKS']['getPageLayout']) && is_array($GLOBALS['TL_HOOKS']['getPageLayout'])) {
         foreach ($GLOBALS['TL_HOOKS']['getPageLayout'] as $callback) {
             $this->import($callback[0]);
             $this->{$callback}[0]->{$callback}[1]($objPage, $objLayout, $this);
         }
     }
     /** @var \ThemeModel $objTheme */
     $objTheme = $objLayout->getRelated('pid');
     // Set the layout template and template group
     $objPage->template = $objLayout->template ?: 'fe_page';
     $objPage->templateGroup = $objTheme->templates;
     // Store the output format
     list($strFormat, $strVariant) = explode('_', $objLayout->doctype);
     $objPage->outputFormat = $strFormat;
     $objPage->outputVariant = $strVariant;
     // Initialize the template
     $this->createTemplate($objPage, $objLayout);
     // Initialize modules and sections
     $arrCustomSections = array();
     $arrSections = array('header', 'left', 'right', 'main', 'footer');
     $arrModules = deserialize($objLayout->modules);
     $arrModuleIds = array();
     // Filter the disabled modules
     foreach ($arrModules as $module) {
         if ($module['enable']) {
             $arrModuleIds[] = $module['mod'];
         }
     }
     // Get all modules in a single DB query
     $objModules = \ModuleModel::findMultipleByIds($arrModuleIds);
     if ($objModules !== null || $arrModules[0]['mod'] == 0) {
         $arrMapper = array();
         // Create a mapper array in case a module is included more than once (see #4849)
         if ($objModules !== null) {
             while ($objModules->next()) {
                 $arrMapper[$objModules->id] = $objModules->current();
             }
         }
         foreach ($arrModules as $arrModule) {
             // Disabled module
             if (!$arrModule['enable']) {
                 continue;
             }
             // Replace the module ID with the module model
             if ($arrModule['mod'] > 0 && isset($arrMapper[$arrModule['mod']])) {
                 $arrModule['mod'] = $arrMapper[$arrModule['mod']];
             }
             // Generate the modules
             if (in_array($arrModule['col'], $arrSections)) {
                 // Filter active sections (see #3273)
                 if ($arrModule['col'] == 'header' && $objLayout->rows != '2rwh' && $objLayout->rows != '3rw') {
                     continue;
                 }
                 if ($arrModule['col'] == 'left' && $objLayout->cols != '2cll' && $objLayout->cols != '3cl') {
                     continue;
                 }
                 if ($arrModule['col'] == 'right' && $objLayout->cols != '2clr' && $objLayout->cols != '3cl') {
                     continue;
                 }
                 if ($arrModule['col'] == 'footer' && $objLayout->rows != '2rwf' && $objLayout->rows != '3rw') {
                     continue;
                 }
                 $this->Template->{$arrModule}['col'] .= $this->getFrontendModule($arrModule['mod'], $arrModule['col']);
             } else {
                 $arrCustomSections[$arrModule['col']] .= $this->getFrontendModule($arrModule['mod'], $arrModule['col']);
             }
         }
     }
     $this->Template->sections = $arrCustomSections;
     // Mark RTL languages (see #7171)
     if ($GLOBALS['TL_LANG']['MSC']['textDirection'] == 'rtl') {
         $this->Template->isRTL = true;
     }
     // HOOK: modify the page or layout object
     if (isset($GLOBALS['TL_HOOKS']['generatePage']) && is_array($GLOBALS['TL_HOOKS']['generatePage'])) {
         foreach ($GLOBALS['TL_HOOKS']['generatePage'] as $callback) {
             $this->import($callback[0]);
             $this->{$callback}[0]->{$callback}[1]($objPage, $objLayout, $this);
         }
     }
     // Set the page title and description AFTER the modules have been generated
     $this->Template->mainTitle = $objPage->rootPageTitle;
     $this->Template->pageTitle = $objPage->pageTitle ?: $objPage->title;
     // Meta robots tag
     $this->Template->robots = $objPage->robots ?: 'index,follow';
     // Remove shy-entities (see #2709)
     $this->Template->mainTitle = str_replace('[-]', '', $this->Template->mainTitle);
     $this->Template->pageTitle = str_replace('[-]', '', $this->Template->pageTitle);
     // Fall back to the default title tag
     if ($objLayout->titleTag == '') {
         $objLayout->titleTag = '{{page::pageTitle}} - {{page::rootPageTitle}}';
     }
     // Assign the title and description
     $this->Template->title = strip_insert_tags($this->replaceInsertTags($objLayout->titleTag));
     // see #7097
     $this->Template->description = str_replace(array("\n", "\r", '"'), array(' ', '', ''), $objPage->description);
     // Body onload and body classes
     $this->Template->onload = trim($objLayout->onload);
     $this->Template->class = trim($objLayout->cssClass . ' ' . $objPage->cssClass);
     // Execute AFTER the modules have been generated and create footer scripts first
     $this->createFooterScripts($objLayout);
     $this->createHeaderScripts($objPage, $objLayout);
 }
Beispiel #4
0
 /**
  * @param DataContainer $dc
  */
 public function jumpToMandatory(DataContainer $dc)
 {
     if (ModuleModel::findById($dc->id)->type === 'clr_unsubscribe') {
         $GLOBALS['TL_DCA']['tl_module']['fields']['jumpTo']['eval']['mandatory'] = true;
     }
 }