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;
}
}