Find all published articles by their parent ID and column
public static findPublishedByPidAndColumn ( integer $intPid, string $strColumn, array $arrOptions = [] ) : |
||
$intPid | integer | The page ID |
$strColumn | string | The column name |
$arrOptions | array | An optional options array |
리턴 | A collection of models or null if there are no articles in the given column |
/** * Generate the module */ protected function compile() { /** @var PageModel $objPage */ global $objPage; if (!strlen($this->inColumn)) { $this->inColumn = 'main'; } $intCount = 0; $articles = array(); $id = $objPage->id; $this->Template->request = \Environment::get('request'); // Show the articles of a different page if ($this->defineRoot && $this->rootPage > 0) { if (($objTarget = $this->objModel->getRelated('rootPage')) !== null) { $id = $objTarget->id; $this->Template->request = $this->generateFrontendUrl($objTarget->row()); } } // Get published articles $objArticles = \ArticleModel::findPublishedByPidAndColumn($id, $this->inColumn); if ($objArticles === null) { return; } while ($objArticles->next()) { // Skip first article if (++$intCount <= intval($this->skipFirst)) { continue; } $cssID = deserialize($objArticles->cssID, true); $articles[] = array('link' => $objArticles->title, 'title' => specialchars($objArticles->title), 'id' => $cssID[0] ?: 'article-' . $objArticles->id, 'articleId' => $objArticles->id); } $this->Template->articles = $articles; }
/** * 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; } }