findPublishedByPidAndColumn() public static method

Find all published articles by their parent ID and column
public static findPublishedByPidAndColumn ( integer $intPid, string $strColumn, array $arrOptions = [] ) : Collection | ArticleModel[] | ArticleModel | null
$intPid integer The page ID
$strColumn string The column name
$arrOptions array An optional options array
return Contao\Model\Collection | ArticleModel[] | ArticleModel | null A collection of models or null if there are no articles in the given column
Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 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;
     }
 }