Contao\Controller::getFrontendModule PHP Method

getFrontendModule() public static method

Generate a front end module and return it as string
public static getFrontendModule ( mixed $intId, string $strColumn = 'main' ) : string
$intId mixed A module ID or a Model object
$strColumn string 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::findPublishedByIdOrAliasAndPid($strArticle, $objPage->id);
                    // Send a 404 header if there is no published article
                    if (null === $objArticle) {
                        throw new PageNotFoundException('Page not found: ' . \Environment::get('uri'));
                    }
                    // Send a 403 header if the article cannot be accessed
                    if (!static::isVisibleElement($objArticle)) {
                        throw new AccessDeniedException('Access denied: ' . \Environment::get('uri'));
                    }
                    // 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;
        }
    }